如何定位慢SQL与优化
- 1首先使用慢日志定位慢SQL
- 2使用EXPLAIN分析SQL,着重关注Type与EXTR字段
- 3修改SQL或建立索引
查看慢日志相关配置
Show variables like '%query%'
查询结果如上:
long_query_time: 定义查询耗时为多久可以判定为慢查询SQL
slow_query_log: 这个开关是慢日志的开关
slow_query_log_file: 该配置为定义慢日志的目录以及文件名
//对应的设置慢日志相关的参数
set global long_query_time=1;
set global slow_query_log=on;
//查看当前的状态值
show status like '%slow_queries%';
Explain 分析慢sql
explain select * from TB_CALCPROC;
执行结果如下
TYPE字段
当type字段为all或者index的时候则代表sql可能需要优化
Extra字段
若Extra出现一下俩个字段,则意味着MYSQL根本不能使用索引,效率会有重大影响,应尽可能进行优化
Mysql的最左匹配原则
- 最左匹配原则,非常重要的匹配原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a=3 and b=4 and c>5 and d=6;若建立联合索引的顺序为(a,b,c,d),则d不会走索引,则如果建立(a.b,d,c)的索引,则都可以走到,a,b,d的顺序可以任意调整
- =与IN可以乱序,比如a=1 and b=2 and c=3建立(a,b,c)索引可以任意顺序,mysql优化查询器会帮助你优化为索引可识别的顺序
MySQL最左匹配的成因:
Mysql建立联合索引的过程类似于先根据第一个联合索引字段进行排序,再根据联合索引第二个字段进行排序,故第一个字段是肯定有序的,若跳过第一个字段则不会走联合索引
索引是建立的越多越好么?
- 数据量小的表没必要建立索引,建立索引会增加额外的索引开销
- 数据变更需要维护索引,因此更多的索引代表更多的维护成本
- 更多的索引与意味着更多的空间