1

我在阅读有关Non Clustered Index的信息,其中指出“Nonclustered索引仅包含指向实际数据行的索引列和行定位器的值,而不是包含数据行本身。查询引擎必须采取额外步骤才能找到实际数据。“非集群索引中的行定位器

查询 - 我不清楚Row Locator。我假设它不是Primary key。在后台发生了一些与Row-Locator有关的事情来唯一标识该行。

回答

6

如果该表具有唯一聚簇索引,则“行定位符”由聚簇索引的列组成。

对于非唯一聚簇索引,“行定位符”由聚簇索引的列组成,并加上一个新的字段,以便使参考唯一。新领域对用户是不可见的。它被称为“独特性”,由四个字节组成。

在没有聚簇索引(aka堆)的表中,“行定位符”是RID或行标识符。 RID指向一个物理位置。它由文件标识符(ID),页码和页面上的行号组成。

的“行定位”的一个实际后果是,它是有道理的有一个表有很多索引:)小主键Full details on this MSDN page.

+0

@PankajGarg:它实际上是聚簇索引,请参见[MSDN](http://msdn.microsoft.com/zh-cn/library/ms188783.aspx ):“如果在表上定义了聚簇索引,则非聚簇索引始终包含聚簇索引列。” – Andomar

+0

在为行定位器收集主键列信息时是否包含任何优先级?我问这是因为,我可以使用主/备用/候选键,所有这些都唯一标识该行。 – Nilish

0

@Nilish:“候选键”是一个术语当你决定使用哪一列作为主键时。而SQL不知道这些。我不知道“备用密钥”是什么意思,除了它是另一组可用于主键的列。

因此,SQL中没有“优先级”的概念。 SQL不知道哪些列唯一标识了记录,直到通过创建主键告诉它。一旦你定义了密钥,那么SQL就使用它们。

表没有索引(堆)或非唯一聚簇索引或唯一聚簇索引。没有其他的可能性。 (主键通常是唯一的聚簇索引。)

相关问题