● 索引下推可以在非前导列的索引由于某种原因发生了索引失效,不会马上回表查询,而且是先返回符合前导列的所有索引,然后判断这些索引是否符合条件,再去回表。减少回表的次数。
● 执行计划中的extra是use index condition
● 索引下推例子1:
select d from t2 where a = "ni" and b = 1;
//b类型转换,导致索引失效。
● 索引下推的例子2:
● 索引下推是 MySQL 5.6引入了一种优化技术,默认开启,使用SET optimizer switch ="index condition pushdown=off’
;可以将其关闭。
● people表中(zipcode,lastname,firstname)
成一个索引SELECT* FROM people WHERE zipcode=’ 95054' AND lastname LIKE "%etrunia%’ AND address LIKE%Main Street%
;
● 如果没有使用索引下推技术,则MySQL会通过zipcode=’95054’从存储引擎中查询对应的数据,返回到MySQL服务端,然后MySQL服务端基于lastname LIKE%etrunia%
和address LIKE %Main Street%
来判断数据是否符合条件。
● 如果使用了索引下推技术,则MYSQL首先会返回符合zipcode=’95054’的索引,然后根据lastname LIKE"%etrunia%
来判新索引是否符合条件
● 如果符合条件,则根据该索引来定位对应的数据,如果不符合,则直接reject掉。 有了索引下推优化,可以在有like条件查询的情况下,减少回表次数