MySQL慢查询分析

记录一次SQL优化

MySQL出现CPU使用率高,IO很低,记录下分析过程:

SQL语句如下:

1
2
3
4
5
6
select
auh.id
from admin_user_history as auh, admin_user as au
where auh.`login_id`=au.`login_id`
order by auh.gmt_create
desc limit 0,10;

执行计划如图:

分析:可以看到两张表的数据并不多,对于join字段login_id,admin_user表login_id varchar(32) 包含索引KEY idx_gmtC_loginId (gmt_create,login_id),admin_user表login_id varchar(128)无索引。由于admin_user没有用到所以所以执行计划的过程是先做39064*8291的数据join再排序,都是非常耗CPU的,根据测试一个会话一句SQL会用满一个核。。。

解决: admin_user添加logdin_id索引

执行计划:

现在产生的数据量就很少了。

经验:
在两个表关联时候,可能都要加上索引来优化。