今日面试题 :MySQL 的索引下推是什么?
大家好,我是鸭鸭。
刷题就上面试鸭,帮助大家更高效通过面试(支持网页端、小程序):https://mianshiya.com/ 。
祝大家都能拿到心仪的 Offer!
回答重点
索引下推(Index Condition Pushdown, ICP)是一种减少回表查询,提高查询效率的技术。它允许 MySQL 在使用索引查找数据时,将部分查询条件下推到存储引擎层过滤,从而减少需要从表中读取的数据行,减少了 IO(本该由 Server 层做操作,交由存储引擎层因此叫做 “下推” ) 。
注意:索引下推是应用在联合索引上的。
扩展知识
官网示例说明
假设当前 people 表有索引 INDEX (zipcode, lastname, firstname) ,当执行以下查询时:
▼sql复制代码SELECT * FROM people WHERE zipcode='95054' AND lastname LIKE '%etrunia%' AND address LIKE '%Main Street%';
如果没有索引下推,当前的联合索引只能用上 zipcode='95054' 这个条件,引擎层用不上 lastname 这个条件过滤,只能得到所有符合 zipcode='95054' 记录,传递给 server 层过滤。
有了索引下推之后,引擎层在得到符合zipcode='95054'的数据后,可以直接通过 lastname 条件过滤数据,不符合条件的不会返回给 server 层。
索引下推注意点
1)索引下推在 MySQL 5.6 及以后的版本支持,InnoDB 和 MyISAM 这两个存储引擎都生效。
2)如果查询中引用了子查询索引下推可能不会生效,具体看 explain。
3)使用了函数或表达式索引下推也不能生效,这个和是否能命中索引的条件是一样的。
4)使用了聚簇索引(主键)查询,索引下推也不会生效,因为其是对于非聚簇索引来进行减少回表次数。
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
