慢查询sql
如何定位并优化慢SQL查询
1. 根据慢日志定位慢查询sql
使用SQL命令查询慢日志设置
1 | SHOW VARIABLES LIKE '%QUERY%'; |
最后两个变量slow_query_log和slow_query_log_file即和慢日志有关,第一个变量控制是否开启慢日志,第二个变量定义慢日志存储位置。
超过long_query_time时间等查询会被记录在慢日志中。
开启慢查询命令
打开慢查询:
1 | SET GLOBAL slow_query_log = ON; |
设置慢查询时间:
1 | SET GLOBAL long_query_time = 1; |
直接使用命令设置数据库重启后会还原,想要永久需要到my.cnf配置文件中去设置。
使用sql命令查询慢日志状态
1 | SHOW STATUS like '%slow_queries%'; |
Slow_queries显示慢查询记录条数。
2. 使用explain等工具分析sql
在命令前加explian即可分析
例如:
1 | EXPLAIN SELECT `name` FROM person_info_large ORDER BY name desc; |
其中id表示执行顺序,对于复合查询来说id越大越先执行。
type表示mysql找到需要的数据行的方式,方式性能从最优到最差如图所示:
index和all表明走的是全表扫描,故非常慢。Extra:
3. 修改sql或者尽量让sql走索引
改sql
例如命令:
1 | SELECT `name` FROM person_info_large ORDER BY name desc; |
由于name没有走索引,故可以把name改成count等有索引的项目
加索引
1 | alter table person_info_large add index idx_name(name); |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Alfred的小站!








