时间:2021-07-01 10:21:17 帮助过:2人阅读
对于上述语句,数据库可以通过索引来定位zipcode等于95054的记录,但是索引对where条件的lastname LIKE ‘%etrunia%‘ AND address like ‘%Main Street%‘没有任何帮助。若不支持ICP优化,数据库需要先通过索引取出所有zipcode等于95054的记录,然后在过滤WHERE之后的两个条件
若支持ICP,在索引取出时,就会进行WHERE条件的过滤,然后再去获取记录。这将大大提高查询效率。当然,WHERE可以过滤的条件时要改索引可以覆盖的范围
SELECT * FROM salaries WHERE(from_date between ‘‘1986-01-01‘ AND ‘1995-01-01‘) AND(salary between 38000 and 40000);
可以看到Extra有Using index condition提示,但是为什么会在这里的idx_s索引会使用到ICP优化呢?因为这张表的主键是(emp_no,from_date)联合索引。所以idx_s索引中包含了from_date的数据,故可以采用此优化方式
对比同时开启MRR后的执行时间
可以看到同时开启MRR后性能提示400%
MySQL中Index Condition Pushdown(ICP)优化
标签: