覆盖索引是什么?
                           
天天向上
发布: 2025-05-10 17:19:37

原创
12 人浏览过

覆盖索引(Covering Index) 是一种能够完全满足查询请求而无需访问表数据的索引。具体来说,当一个索引包含了查询语句所需要的所有列(包括 SELECTWHEREORDER BYGROUP BY 等涉及的列)时,就称为覆盖索引。

1. 覆盖索引的特点

  • 减少 I/O:只需访问索引页,减少磁盘 I/O 开销。
  • 提高查询效率:避免回表查询,速度更快。
  • 减少锁争用:仅访问索引,减少对数据页的锁竞争。

2. 覆盖索引的示例

假设有如下 users 表:

CREATE TABLE users (
    id INT PRIMARY KEY,
    username VARCHAR(50),
    email VARCHAR(100),
    age INT,
    created_at DATETIME
);

创建一个复合索引:

CREATE INDEX idx_users_username_email ON users (username, email);

执行以下查询:

SELECT username, email FROM users WHERE username = 'Alice';

使用覆盖索引的原因

  • 索引 idx_users_username_email 包含了 usernameemail 列,因此查询可以完全通过索引解决,无需访问 users 表的数据页。

3. 覆盖索引的限制

  • 字段限制:覆盖索引只能覆盖那些在索引中明确存在的列。
  • 空间消耗:覆盖索引往往包含更多列,占用更多存储空间。
  • 维护成本:涉及列较多时,更新和插入操作的代价更高。

4. 什么时候使用覆盖索引

  • 读多写少的场景。
  • 需要高性能的查询。
  • 表数据较大且频繁访问部分列。

更多详细内容请关注其他相关文章!

发表回复 0

Your email address will not be published. Required fields are marked *