数据库索引abc,请问查询哪些字段能命中索引
查询语句:select * from table where a=? and b> ? and c=?
字段a
和b
能命中索引,c
无法命中索引,但是字段c
的条件可以通过 “索引下推”过滤。
联合索引
(a, b, c)
的结构决定了先匹配a
,再匹配b
,最后是c
。由于
b
使用了范围查询(b> ?
),范围查询会中断索引的进一步使用。也就是说,一旦遇到范围查询,索引只能用到该字段为止。因此b
会命中索引,但索引的使用会在这里中断。c
无法直接使用索引进行匹配。但开启索引下推后,存储引擎在遍历索引时,会同时检查
c=?
的条件,直接过滤掉不满足c=?
的记录,而无需将这些记录回表查询完整数据后再过滤。
虽然c
不参与索引的范围定位,但通过索引下推,c=?
的条件会在索引层面被提前过滤,减少了回表的记录数,提高查询效率。