1.什么是覆盖索引
一个索引包含了满足查询结果的数据,不需要回表
2.索引条件下推index_condition_pushdown
2.1例子1
select * from s1 where key1 > 'z' and key like '%s'
此表有两个索引,一个关于主键的聚簇索引,一个关于key1的二级索引
执行此语句时
情况1:在关于Key1的索引中查询记录(假设有100条满足条件key1>'z’的记录),然后将这100条记录全部在聚簇索引中回表(有100次回表操作),最后过滤满足条件(key like ‘%s’)的记录
情况2:在关于Key1的索引中查询记录(假设有100条满足条件key1>'z’的记录),直接过滤满足条件(key like ‘%s’)的记录(假设结果集仅有十条记录),最后回表(只有10此回表操作)
情况2,则为索引条件下推ICP
2.2举例2
此表含有关于三个字段的联合索引:
执行语句
此时,只是用了联合索引的一部分
可能使用索引的情况:
1)使用联合索引查找满足条件(zipcode==‘000001’)的记录(假设有1000条),将这1000条记录在聚簇索引中回表(1000次回表操作),查询全部的记录数据,然后根据后续条件(lastname like ‘%张%’ and address like ‘%北京市%’)完成过滤,得到最终的结果集
2)使用联合索引查找满足条件(zipcode==‘000001’),并且联合索引中存在lastname的信息可进行条件匹配(lastname like ‘%张%’)得到满足这两个条件的记录(假设有100条),最后回表完成其他的条件过滤(仅有100次回表操作)