sql - 什么是涵盖索引?

标签 sql database indexing

我刚刚在一些数据库讨论中听到了涵盖索引这个术语——它是什么意思?

最佳答案

覆盖索引 是包含您查询所需的所有(可能更多)列的索引。

例如,这个:

SELECT *
FROM tablename
WHERE criteria

通常会使用索引来加快使用条件检索哪些行的分辨率,但随后它会转到整个表来检索行。

但是,如果索引包含列 column1、column2column3,则此 sql:

SELECT column1, column2
FROM tablename
WHERE criteria

并且,如果特定索引可用于加快解析要检索的行,则该索引已经包含您感兴趣的列的值,因此它不必转到表中检索行,但可以直接从索引中生成结果。

如果您看到一个典型的查询使用 1-2 列来解析哪些行,然后通常添加另外 1-2 列,也可以使用它,附加这些额外的列可能是有益的(如果它们是完全相同)到索引,以便查询处理器可以从索引本身获取所有内容。

这是一个 article: Index Covering Boosts SQL Server Query Performance关于这个问题。

关于sql - 什么是涵盖索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62137/

相关文章:

mysql - 如何为每个注册的新用户启动自动增量

php - 使用 session 获取多个数组值

sql - 在两个 postgres 数据库表之间同步数据

mySQL 优雅的自连接

sql-server - macOS Catalina 上的 RODBC

c - 使用 ptrdiff_t 或 size_t 进行索引

sql-server - Django 模型选择 : IntegerField vs CharField

postgresql - 在这种情况下,为什么 Postgresql 不对我的复合索引使用 Index Only Scan?

sql - 提交前更新 IF 条件

mysql - INNER JOIN、LEFT JOIN、RIGHT JOIN 和 FULL JOIN 有什么区别?