Skip to content

索引覆盖

覆盖索引(Covering Index) 是指查询所需的所有字段都包含在索引中,使得 MySQL 无需回表(即无需访问聚簇索引即数据行)即可直接从索引中获取完整结果集的索引设计策略。 包含满足查询的所有列。只访问索引的查询,只需读索引而不用读数据。

索引下推

索引下推(Index Condition Pushdown/ICP) 是指在使用索引时,将过滤条件下推到存储引擎层级进行处理,以减少不必要的数据读取和传输。
查询满足最左前缀法则,但只满足了一部分。查询优化器能够利用索引来极大地缩小初始的搜索范围,但无法利用索引的全部列来完成精确定位。索引可以用 index LIKE '1%' 来进行范围查找,但 index2 = '2' 这个条件无法用于进一步缩小索引的查找范围。 在传统的查询过程中,MySQL会首先使用索引定位到符合条件的记录,然后再根据过滤条件进行数据过滤。这种方式在某些情况下效率较低,因为它需要读取并传输很多不符合条件的记录。 而索引下推的原理是,在使用索引定位到符合条件的记录时,将过滤条件下推到存储引擎层级进行处理。存储引擎可以利用索引的顺序性和范围性,直接在索引上进行过滤,减少不必要的数据读取和传输

索引跳跃扫描(Index Skip Scan)

在传统的索引扫描中,如果查询条件只涉及索引的一个部分(例如,只使用一个列的索引),数据库会从头到尾扫描整个索引以找到匹配的行。但如果查询涉及到多个列,并且这些列在索引中不是连续的,MySQL可能会使用一种更高效的方法:跳跃扫描。
例如,考虑一个包含两个列(A, B)的复合索引(A, B)。如果你执行一个查询,只使用B的条件查询(例如WHERE B = 1),而没有涉及A列

Released under the MIT License.