正常的SQL Server索引是否包括主键值



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

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

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

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

因此,我的问题是,普通的SQL Server索引上是否有主键值,或者它们只是有一个指向聚集索引的指针(出于我的目的,我只是假设主键和聚集索引是共同扩展的)?如果它只包含一个指向磁盘的指针,而不包含主键值,我会考虑在第二列的基础上,将第一列(主键)设置为普通索引上的include列。

引用CREATE INDEX:的文档

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

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

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

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

来源:SQL Server 2008查询性能调整提取

最新更新