什么是覆盖索引和索引下推?
1 个回答
想多了全是问题,想开了全是答案。叶子### 覆盖索引 覆盖索引指的是在某个查询中,所需要的数据完全能够通过索引获取,无需访问表中的实际数据行。也就是说,查询的所有字段都在索引中,因此可以避免回表操作。 - **特点**:当一个查询只访问索引中的字段时,索引就“覆盖了”查询。 - **优势**:减少了访问表数据的次数,提升查询效率。 - **示例**: ```sql SELECT id, name FROM users WHERE age = 25; ``` 如果 `age` 字段有索引 `(age, id, name)`,那么此查询可以通过索引直接获取所需的字段,不需要访问表。 ### 索引下推(Index Condition Pushdown,ICP) 索引下推是在 MySQL 5.6 中引入的一种优化策略。传统的索引遍历需要先通过索引找到记录,然后回表再进行过滤。而索引下推可以在索引遍历阶段直接对索引包含的字段进行条件过滤,减少不必要的回表操作。 - **特点**:在索引遍历过程中,先对索引中的字段进行条件判断,过滤掉不满足条件的记录。 - **优势**:减少回表次数,提升查询性能。 - **示例**: ```sql SELECT * FROM users WHERE age = 25 AND name = 'Alice'; ``` 如果有 `age` 字段的索引 `(age)`,MySQL 可以先通过 `age = 25` 的索引定位,然后使用索引下推在索引层级检查 `name = 'Alice'`,减少不必要的回表操作。发布于 2024-09-05 18:59 •IP属地 北京举报评论收藏
公众号进入网站体验更佳

