对外层表access method选出的行,在传给内存join前,执行条件过滤(explain filtered列),这个过滤基于统计有时不准
索引range scan没有where严格,从where中提取某个索引的range条件。
比如:
(key_part1 = 1 AND key_part2 < 2) OR (key_part1 > 5)
提取结果为:
1 2 3 |
(1,-inf) < (key_part1,key_part2) < (1,2) (5,-inf) < (key_part1,key_part2) |
形如col_name IN(val1, ..., valN)
如果col_name有唯一索引,那么每个值预估匹配行=1。
如果非唯一索引,那么值个数<eq_range_index_dive_limit 执行索引挖掘,否则使用索引统计
Multi-Range Read,扫描secondary index的时候,将row id累积在join buffer中,对join buffer中的row id排序后去base table顺序查找。
形如:
select where keyPart1=N and keyPart2>M
特征:
执行思路:
那么将where条件推入存储引擎层,在扫描secondary indexes的时候过滤不满足条件的行,减少回表IO。
explain extra column Using index condition
index_condition_pushdown=off 或者NO_ICP优化器hint关闭
Comments are closed.