目录
SQL性能分析
SQL执行频率
MySQL慢查询日志(linux)
注释:MySQL重启:systemctl restart mysqld
profile详情
注释:查看profiling是否开启,可以使用select @@profiling;
查看耗时情况
explain执行计划
explain执行计划各字段含义:
id
select查询的序列号,表示查询中执行select子句或者是操作表的顺序(id相同,执行顺序从上到下;id不同,值越大,越先执行)。
相同时:
不同时:
select_type
表示select的类型,常见的取值有SIMPLE(简单表,即不使用表连接或者子查询). PRIMARY(主查询,即外层的查询). UNION(UNION中的第二个或者后面的查询语句), SUBQUERY(SELECT/WHERE之后包含了子查询)等。
type
表示连接类型,性能由好到差的连接类型为NULL,system,const(主键或唯一索引),eq_ref,ref(非唯一索引),range,index,all。
possible_key
显示可能应用在这个这张表上的索引,一个或多个。
索引使用
最左前缀法则
范围查询
索引失效情况
索引列运算
注意:不要再索引列上进行运算操作,索引将失效。
字符串不加引号
模糊查询
如果仅仅是尾部模糊匹配,索引捕获失效。如果是头部模糊匹配,索引失效。
or连接的条件
用or分割开的条件,如果or前的条件中的列有索引,而后面的列中没有索引,那么涉及的索引都不会被用到。
数据分布影响
如果MySQL评估使用索引比全表更慢,则不使用索引。
数据大于整张表一半,一般情况MySQL会走全表扫描,反之走索引。
SQL提示
SQL提示,是优化数据库的一个重要手段,简单来说,就是在SQL语句中加入一些人为的提示来达到优化操作的目的。
use index(推荐使用的索引) ignore index(不推荐使用的索引) force index(强迫使用指定索引)
覆盖索引
尽量使用覆盖索引(查询使用了索引,并且需要返回的列,在该索引中已经全部能够找到),减少select *;
观察最后一列,上面的性能高于下面
前缀索引
语法:
前缀长度: