什么是索引下推
# 一.ICP (index Condition Pushdown)索引下推
服务于联合索引,mysql5.6之后的新特性
如上图所示,建立联合索引(name,age)
之后我们使用查询语句select * from tuser where name like '张%' and age =10
在5.6之前
- 通过联合索引查询到张猛和张三的主键
- 拿着主键1,4进行回表两次从而查到完整的数据,并在完整的数据集中比对age是否等于10再进行过滤
缺点:回表次数较多,从而增加了io次数
5.6之后,出现索引下推
- 根据联合索引最左匹配原则会拿到张猛和张三两条数据
- 索引下推:如果能在二级索引中拿到age,直接进行过滤,最后满足条件的再进行回表
- 张猛和张三通过索引下推过滤掉张猛,最后张三通过1次回表获得完整数据
优点:通过在二级索引树上搜索时提前过滤减少回表次数,从而减少io次数。
# 二.使用条件
- 建立了联合索引
- 需要过滤的索引也必须在联合索引中
例如:
sql语句:select * from tuser where name like '张%' and address='成都'
address是没有出现在联合索引中,就无法使用索引下推
对于innodb引擎中icp只用于辅助索引。如果引用了子查询、或者存储过程,索引下推就会失效。
- 如何知道是否使用了索引下推?
使用explain语句,在extra中可以看到use index condition
编辑 (opens new window)
上次更新: 2024/02/22, 14:03:19