2

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

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

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

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

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

4

3 回答 3

7

引用文档CREATE INDEX

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

于 2012-09-27T16:00:29.063 回答
3

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

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

于 2012-09-27T15:58:02.527 回答
1

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

来源:SQL Server 2008 查询性能调优提炼

于 2012-09-27T16:01:48.107 回答