具体使用
1、慢查询的开启并捕获
2、 explain+慢SQL分析
3 、show profile查询QL在Mysq1服务器里面的执行细节和生命周期情况
4、SQL数据库服务器的参数调优
1、永远小表驱动大表
外查询表大,子查询表小,选择IN;外查询表小,子查询表大,选择EXISTS;若两表差不多大,则差不多。
2、order by 关键字优化
(1)order by 子句,尽量使用Index方式排序,避免使用FileSort方式排序
Mysql支持二种方式的排序, Filesortndex和, Index效率高
ORDER BY满足两情况,会使用 Index方式排序:
① ORDER BY语句使用索引最左前列
②使用 Where子句与order BY子句条件列组合满足索引最左前列
(2)尽可能在索引列上完成排序操作,遵照索引键的最佳左前缀
(3)如果不在索引列上,file sort有两种算法:MySQL就要启动双路排序和单路排序
① 双路排序:Mysql4.1之前是使用双路排序字面意思就是两次扫描磁盘,最终得到数据,
读取行指针和 order by列,对他们进行排序,然后扫描已经排序好的列表,按照列表中的值重新从列表中读取对应的数据输出;
从磁盘取排序字段,在 buffer缓冲区进行排序,再从磁盘取其他字段。
②单路排序
取一批数据,要对磁盘进行了两次扫描,众所周知,Io是很耗时的,所以在 mysq44.1之后,出现了第二种改进的算法,就是单路排序。
所谓单路排序:从磁盘读取查询需要的所有列,按照 order by列在buffer缓冲区对它们进行排序,然后扫描排序后的列表进行输出,它的效率更快一些,避免了第二次读取数据。并且把随机IO成了顺序IO,但是它会使用更多的空间,因为它把每一行都保存在内存中了。
由于单路是后出的,总体而言好过双路,但是用单路也存在一些文体:
优化策略:
增大sort_buffer_size参数的设置
增大max_length_for_sort_data参数的设置
总结:
3、group by 关键字优化
① group by实质是先排序后进行分组,遵照索引建的最佳左前缀
②当无法使用索引列,增大 max_length_for_ sort_data参数的设置+增大 sort_buffer_size参数的设置
③ where高于having,能写在 where限定的条件就不要去having限定的条件了。