常用的SQL优化办法有哪些

数据库优化的几个方面

  1. SQL以及索引的优化是最重要的。
  2. 要根据一些范式来进行表结构的设计。
  3. 系统配置的优化。
  4. 硬件优化。

sql语句的优化
可以通过打开Mysql中的慢查询日志来定位有问题的sql语句
慢查询日志相关内容:https://www.cnblogs.com/kerrycode/p/5593204.html
慢查询日志主要分为5部分,第一部分是慢查询时间,第二部分是慢查询的来源主机和用户,第三部分是查询的执行时间、锁定时间、发送的行数、扫描的行数。最后是时间戳形式记录的命令以及该命令的执行的时间戳。
通过explain查看sql执行计划,具体分析、优化

索引优化

  1. 选择索引
    1)选择合适的索引列,选择在 where, group by, order by, on 从句中出现的列作为索引项对于离散程度不大的列,没有必要创建索引
    2)索引字段越小越好(因为数据库的存储单位是页,一页中能存储的数据越多越好)
    3)离散度大的列放在联合索引前边
    判断离散程度大小的办法:
select count(distinct ziduan1),count(distinct ziduan2) from tablename
  1. 索引优化方法:
    索引一般情况下都是高效的。不过凡是都有两面性,索引是以空间换时间的一种策略,索引本身在提高查询效率的同时会影响插入、更新、删除的效率。不当的使用索引不仅增加了写操作的负担,也会影响读取的效率。索引越多,数据库分析的越慢。注意点:
    1)InnoDB 每个索引都会加上主键,联合索引不要加上主键,innodb会自动加,否则会冗余。
    2)索引存在的目的是为了加快查询的效率,不过不是索引越多越好,建立索引要适当才好。过多的索引会增加数据库判断使用什么索引来查询的开销,所以,有时候也会出现以去掉重复或者无效的索引为优化手段的优化方式。
    3)主键已经是索引了,所以primay key 的主键不用再设置unique唯一索引了。
  2. 索引原理参考:点这里

数据表结构优化
1、选择合适的数据类型
(1)使用可存下数据的最小的数据类型。
(2)使用简单地数据类型,int要比varchar类型在mysql处理上更简单。
(3)尽可能使用not null定义字段,这是由innodb的特性决定的,因为非not null的数据可能需要一些额外的字段进行存储,这样就会增加一些IO。可以对非null的字段设置一个默认值。
(4)尽量少用text,非用不可最好分表,将text字段存放到另一张表中,在需要的时候再使用联合查询,这样可提高查询主表的效率。
例子1、用int存储日期时间from_unixtime()可将Int类型的时间戳转换为时间格式
select from_unixtime(1392178320); 输出为 2014-02-12 12:12:00unix_timestamp()可将时间格式转换为Int类型
select unix_timestamp(‘2014-02-12 12:12:00’); 输出为1392178320
例子2、存储IP地址——bigInt
利用inet_aton(),inet_ntoa()转换
select inet_aton(‘192.169.1.1’); 输出为3232301313
select inet_ntoa(3232301313); 输出为192.169.1.1
数据库配置优化
硬件优化

发布了38 篇原创文章 · 获赞 8 · 访问量 3311

猜你喜欢

转载自blog.csdn.net/hcwdd/article/details/99618217