慢查询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的小站!