索引条件下推优化
原文链接:https://dev.mysql.com/doc/refman/8.0/en/index-condition-pushdown-optimization.html
索引条件下推 (ICP) 是针对 MySQL 使用索引从表中检索行的情况的优化。如果没有 ICP,存储引擎会遍历索引以定位基表中的行,并将它们返回给 MySQL 服务器,MySQL 服务器会评估这些WHERE
行的条件。启用 ICP 后,如果 WHERE
仅使用索引中的列可以评估部分条件,则 MySQL 服务器会推送这部分条件WHERE
条件下降到存储引擎。然后,存储引擎使用索引条目评估推送的索引条件,只有在满足条件时才会从表中读取行。ICP可以减少存储引擎必须访问基表的次数和MySQL服务器必须访问存储引擎的次数。
Index Condition Pushdown 优化的适用性取决于以下条件:
-
当需要访问完整的表行时, ICP 用于
range
、ref
、eq_ref
和 访问方法。ref_or_null
-
对于
InnoDB
表,ICP 仅用于二级索引。ICP 的目标是减少整行读取的次数,从而减少 I/O 操作。对于InnoDB
聚簇索引,完整的记录已经读入缓冲区InnoDB
。在这种情况下使用 ICP 不会减少 I/O。 -
在虚拟生成列上创建的二级索引不支持 ICP。
InnoDB
支持虚拟生成列的二级索引。 -
不能下推引用子查询的条件。
-
不能下推引用存储函数的条件。存储引擎不能调用存储函数。
-
触发条件不能下推。(有关触发条件的信息,请参阅 第 8.2.2.3 节,“使用 EXISTS 策略优化子查询”。)
-
(MySQL 8.0.30 及更高版本
标签:下推,索引,条件,MySQL,ICP,WHERE From: https://www.cnblogs.com/JaxYoun/p/17383428.html