什么是涵盖指数?

时间:2020-03-05 18:53:14  来源:igfitidea点击:

我刚刚在一些数据库讨论中听过术语"涵盖索引"是什么意思?

解决方案

回答

覆盖索引是包含查询所需要的所有列的索引,并且可能包含更多的列。

例如,这:

SELECT *
FROM tablename
WHERE criteria

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

但是,如果索引包含列column1,column2和column3,则此sql:

SELECT column1, column2
FROM tablename
WHERE criteria

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

如果我们看到典型的查询使用1-2列来解析哪些行,然后通常添加另外的1-2列,则也可以使用此方法,最好追加那些额外的列(如果它们在整个过程中都相同)添加到索引,以便查询处理器可以从索引本身获取所有内容。

这是一篇文章:索引覆盖可提高该主题上的SQL Server查询性能。

回答

覆盖指数只是一个普通指数。如果它可以满足查询而无需分析数据,则称为"覆盖"。

例子:

CREATE TABLE MyTable
(
  ID INT IDENTITY PRIMARY KEY, 
  Foo INT
) 

CREATE NONCLUSTERED INDEX index1 ON MyTable(ID, Foo)

SELECT ID, Foo FROM MyTable -- All requested data are covered by index

这是从SQL Server检索数据的最快方法之一。