EXPLAIN SELECT
a.title,
c.username
FROM
sys_announcement a
LEFT JOIN sys_announcement_send b ON a.id = b.annt_id
LEFT JOIN sys_user c ON b.user_id = c.id WHERE a.bus_type = 'bpm_sms' AND a.del_flag = 0 and a.end_time < NOW();
SHOW WARNINGS;
- explain执行结果
- SHOW WARNINGS 执行结果
可以看出来 a这个表的索引利用率很低,所有排查原因,从 第二个结果看出来是del_flag没有利用上索引导致的,排查原因发现是数据库的类型是字符串,但是用的数字类型去查询,所以导致没有利用上索引
修改后filtered的利用率100%
filtered的意思就是where 条件筛选的条数占扫描到的行数的百分百比
扫描到的行数就是rows这列数据的含义,也是就索引过滤后的行数