MySQL的索引下推机制
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
的字样,说明启用了索引下推。
评论已关闭