MySQL的索引下推机制
warning:
这篇文章距离上次修改已过437天,其中的内容可能已经有所变动。
MySQL的索引下推(Index Condition Pushdown,简称ICP)是MySQL在4.6及以上版本中引入的一个优化器功能,用于在存储引擎层面减少回表次数,提高查询效率。
当查询中包含聚集索引,但需要读取的数据只在非聚集索引中时,ICP会在索引遍历过程中直接判断是否需要取得表数据,减少了对于表的数据访问。
举个简单的例子,假设有一个表users,它有一个聚集索引(id)和一个二级索引(age)。
SELECT * FROM users WHERE age = 20;在没有ICP的情况下,查询会先遍历age索引找出所有年龄为20的用户的id,然后再根据这些id去表中取出完整的记录。
而使用ICP后,遍历age索引时,会将满足条件age = 20的记录的主键id和需要的列直接返回给MySQL服务层,减少了对表的访问。
在MySQL中,可以通过EXPLAIN FORMAT=TREE查看执行计划来判断是否使用了索引下推。
例如:
EXPLAIN FORMAT=TREE SELECT * FROM users WHERE age = 20;如果在执行计划中看到ICP的字样,说明启用了索引下推。
评论已关闭