系统慢慢越来越卡了,怎么定位系统慢的原因,大部分是因为服务器资源占用耗费高引起的,如CPU,内存和带宽等等。MySQL在日常开发工作中可能会遇到某个新功能在测试时需要很久才返回结果,这时就应该分析是不是慢查询导致的,如果确实有慢查询,就需要来学习怎么找到慢查询和怎么分析 SQL 执行效率? 定位慢 SQL 有如下两种解决方案: 查看慢查询日志确定已经执行完的慢查询 show processlist 查看正在执行的慢查询 定位到慢查询语句后,可以通过 explain、show profile 和 trace 等诊断工具来分析慢查询
定位慢 SQL 有如下解决方案
-
查看慢查询日志
-
使用 explain 分析慢查询
-
show profile 分析慢查询
-
show processlist 查看正在执行的慢查询
怎样开启慢查询
开启命令
#开启慢查询
set global slow_query_log = on;
set global long_query_time = 1; #单位s
查询数据存放位置
show global variables like "datadir";
show global variables like "slow_query_log_file";
使用 explain 分析慢查询
使用命令explain关键字
explain select * from A where a.=''
关键指标说明
列名 解释
id 查询编号
select_type 查询类型:显示本行是简单还是复杂查询
table 涉及到的表
partitions 匹配的分区:查询将匹配记录所在的分区。仅当使用 partition 关键字时才显示该列。对于非分区表,该值为 NULL。
type 本次查询的表连接类型
possible_keys 可能选择的索引
key 实际选择的索引
key_len 被选择的索引长度:一般用于判断联合索引有多少列被选择了
ref 与索引比较的列
rows 预计需要扫描的行数,对 InnoDB 来说,这个值是估值,并不一定准确
filtered 按条件筛选的行的百分比
Extra 附加信息