覆盖索引了解吗?
覆盖索引(Covering Index)指的是一种索引能够“覆盖”查询中所涉及的所有列,换句话说,查询所需的数据全部都可以从索引中直接获取,而无需访问数据表的行数据(也就是无需回表)。
通常情况下,索引中只包含表的某些字段,数据库在通过索引查找到满足条件的记录后,还需要回到表中获取其它字段的数据,这个过程叫做“回表”。
假设有一张用户表 users,包含以下字段:id、name、email、age。执行下面的查询:
SELECT age, email FROM users WHERE name = "张三";
如果在 name 列上创建了索引,但没有在 age 和 email 列上创建索引,那么数据库引擎会:
- 使用 name 列的索引查找到满足条件的记录的 id。
- 根据 id 回表查询 age 和 email 字段的数据。
如果创建了一个覆盖索引 idx_users_name_email_age 包含 name、email、age 列:
CREATE INDEX idx_users_name_email_age ON users (age, name, email);
那么执行:
SELECT age, email FROM users WHERE name = "张三";
查询时可以直接从索引中获取 age 和 email 的值,而不需要回表。这是因为索引已经覆盖了查询所需的所有字段。

THE END
暂无评论内容