普通的SQL Server索引是否包含主键值?

时间:2012-09-27 15:54:21

标签: sql-server indexing

我正在创建一个用于数据处理的查找表。结构相当简单。

第一个字段是主键和聚簇索引。将有第二个字段跟踪项目类型。

我们想要第二个字段的索引,因为一些(但不是所有查询)将在该字段上搜索。这些查询还需要提取主键的值。

我希望利用非聚集索引的查询不必转到表并提取主键值。

所以我的问题是正常的SQL Server索引是否具有主键值或者它们只是指向聚簇索引(为了我的目的,我只是假设主键和聚簇索引是同延)?如果它只包含一个指向磁盘而不是主键值的指针,那么我正考虑将第一列(主键)作为基于第二列的普通索引的包含列。

3 个答案:

答案 0 :(得分:6)

引用CREATE INDEX的文档:

  

如果在表上定义了聚簇索引,则非聚簇索引始终包含聚簇索引列。

答案 1 :(得分:3)

它们不一定具有PK列,而是聚集索引的关键列。它们确实用作指向CI行的指针,但也可用于其他类型的查询。

例如,列A上的索引(而不是显式的ID)可以满足查询select A, ID from T

答案 2 :(得分:1)

索引的键值确定数据的顺序。数据与索引一起存储,以便对数据本身进行排序。对于聚簇索引,非聚集索引上的指针由定义聚簇索引的值组成。否则,如果表(堆)上没有索引,则使用扫描,使用行标识符作为指针搜索数据。

来源:SQL Server 2008查询性能调优蒸馏