通过慢查日志发现有问题的sql
1.查询次数多且每次查询占用时间长的sql
通常为pt-query-digest分析的前几个查询
2.IO大的sql
注意pt-query-digest分析中的ROW examine项
3.未命中索引的sql
注意pt-query-digest分析中的rows examine(扫描) 和rows send(发送行数)的对比
通过explain +sql语句 查询sql 的执行计划
分析sql查询:
explain返回各列的含义
table :显示这行数据是关于那张表
type:显示连接使用了哪种类型从最好到最差,类型为const,eq_reg,ref,range,index,all
possible_keys显示可能应用的索引,为空表示没有可能的索引,
key:实际使用的索引,如果为null,表示没有使用索引,
key_len:使用的索引长度,在不损失精确性的情况下,长度越短越好
ref:显示索引的那一列被使用了,
rows:mysql认为必须检查的用来返回请求数据的行数(表扫描的行数)
extra列需要注意的返回值
Using filesort:看到这个的时候,查询就需要优化,mysql需要进行额外的步骤来发现如何返回的行排序,根据连接类型以及存储的排序键值和匹配条件的全部行的
行指针来排序全部行(文件排序 orde by)
Using temporary 看到这个的时候,查询需要优化了,这里,mysql需要创建一个临时表来存储结果,通常在使用order by 上