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