sql-server-2005 – 索引键列VS索引包含列

有人可以解释这两个 – 索引键列VS索引包括列?

目前,我有一个索引有4个索引键列和0包括列。

谢谢

索引键列是索引的b树的一部分。包括的列不是。

取两个索引:

CREATE INDEX index1 ON table1 (col1, col2, col3)
CREATE INDEX index2 ON table1 (col1) INCLUDE (col2, col3)

index1更适合这种查询:

SELECT * FROM table1 WHERE col1 = x AND col2 = y AND col3 = z

而index2更适合这种查询:

SELECT col2, col3 FROM table1 WHERE col1 = x

在第一个查询中,index1提供了一种快速识别感兴趣行的机制。查询将(可能)作为索引查找执行,随后是书签查找以检索完整行。

在第二个查询中,index2作为覆盖索引。 SQL Server不必击中基本表,因为索引提供了满足查询所需的所有数据。 index1也可以作为这种情况下的覆盖指数。

如果你想要一个覆盖索引,但不想添加所有列到b-tree,因为你不寻求它们,或者不能,因为它们不是一个允许的数据类型(例如XML),使用INCLUDE子句。

相关文章
相关标签/搜索