我正在阅读Non Clustered Index
,其中“Nonclustered
索引仅包含索引列和行定位器中指向实际数据行的值,而不包含数据行本身。表示查询引擎必须采取额外步骤才能找到实际数据。“
查询 - 我不清楚Row Locator
。我假设它不是任何Primary key
。背景中发生的事情与Row-Locator
有关,可以唯一地标识行。
答案 0 :(得分:8)
如果表具有唯一聚簇索引,则“行定位器”由聚簇索引的列组成。
使用非唯一聚簇索引,“行定位器”由聚簇索引的列以及SQL Server添加的新字段组成,以使引用唯一。新字段对用户不可见。它被称为“uniqueifier”,由四个字节组成。
在表没有聚簇索引(又称堆)中,“行定位符”是RID或行标识符。 RID指向物理位置。它由文件标识符(ID),页码和页面上的行号组成。
“行定位器”的一个实际结果是,为具有大量索引的表创建一个小主键是有意义的。Full details on this MSDN page.
答案 1 :(得分:0)
@Nilish:“候选键”是在决定使用哪个列作为主键时使用的术语。而且SQL对此一无所知。我不知道“备用密钥”是什么意思,除了它是另一组可用于主键的列。
因此,SQL中没有“优先级”的概念。在您通过创建主键告知记录之前,SQL不知道哪些列唯一标识记录。一旦定义了密钥,SQL就会使用它们。
表没有索引(堆),或者没有唯一的聚簇索引,或者唯一的聚簇索引。没有其他可能性。 (主键通常是唯一的聚簇索引。)