mysql 查询优化 ~explain解读之extra解读

时间:2023-03-09 02:10:42
mysql 查询优化 ~explain解读之extra解读

一 explain 常用状态

1 using filesort 常见于order by 字段 无法走索引造成,文件排序。需要注意优化,复杂条件可以选择建立联合索引进行优化
2 using join buffer size 常见于join连接,并且连接字段无法走索引时造成,缓存存储记录,BML优化,需要注意优化
3 using tempoary 常见于group by和order by操作,需要形成临时表结果集,需要注意优化
4 using index 覆盖索引,索引列可以覆盖所有的查询字段,不用回表读取数据文件,代表最优
6 Using index condition 应用了mysql的ICP特性
7using where:需要回表操作,会增加IO问题,出现的情况特征
    1 select查询的字段有非辅助索引和主键索引的其他值
    2 select查询的条件有非辅助索引和主键索引的其他值 
    注意点
   1 using where单独出现情况需要回表
 8 using index & using where:查找使用了索引,但是需要的数据都在索引列中能找到,所以不需要回表查询数据
    1 select查询的字段都被(单/联合)索引覆盖,查询的条件只有(单/联合)索引,有一定几率出现联合,还有一定记录出现using index
    注意点
    1 using index & using where 不需要回表

2 两种情况的出现也和索引区分度有很大关系,不过效率肯定比单独出现using where强很多

9 Index Condition Pushdown (ICP)是mysql使用索引从表中检索行数据的一种优化方式
特点
1 ICP的优化策略可用于range、ref、eq_ref、ref_or_null 类型的访问数据方法
2 当 SQL 使用覆盖索引时但只检索部分数据时,ICP 无法使用
3 不支持主建索引的ICP
4 mysql 5.6中不支持分区表的ICP