在日常开发中,我们经常会碰到一些复杂的多表联查的SQL,进行性能优化的问题。这时候了解SQL的执行过程就尤为重要。通过在SQL语句前面添加Explain关键字,MySQL就会为我们揭示执行的流程。
【资料图】
id值相同:按照从上往下的顺序执行
id值不同:id值越大,越优先执行
id值两种情况混合:最先优先执行id值大的,id值相同的按照从上往下顺序执行
select_type列解析
type
SQL查询性能的一个重要指标,查询性能由好到坏如下:
system:表里只有一条记录
const:索引只匹配一次就找到数据,该场景常见与主键与唯一索引
eq_ref :主键或者唯一索引的扫描
ref :普通索引的扫描
range :范围搜索,使用了between、in、<>这些关键字后
index: 比起全表扫描稍微好一点,没有扫描所有数据
ALL:全表扫描所有的数据
虽然还有很多其他的Type,但是常见的就上面几种,最低要求要达到range,最好达到ref
possible_keys && key
possible_keys:可能会用到的索引
key:实际用到的索引
key_len
索引字段可能的长度,数字越小约好
ref
1.索引查找用的表里的哪个字段,
2.使用常量等值查询(1=1)显示const
3.使用了表达式、函数情况下显示func
Rows
找到需要的数据,需要扫描数据表的行数,越小约好
filtered
数据表里,符合查询条件的数据,所占用的百分比