6

我正在阅读Non Clustered Index其中说“Nonclustered索引仅包含索引列中的值和指向实际数据行的行定位器,而不是包含数据行本身。这意味着查询引擎必须采取额外的步骤才能找到实际数据。”

查询- 我不清楚Row Locator. 我假设它不是任何Primary key. 背景中发生了与Row-Locator唯一标识行有关的事情。

4

2 回答 2

11

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

对于非唯一聚集索引,“行定位器”由聚集索引的列以及 SQL Server 添加的新字段组成,以使引用唯一。新字段对用户不可见。它被称为“唯一符”,由四个字节组成。

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

“行定位器”的一个实际结果是,为具有大量索引的表设置一个小主键是有意义的:) 此 MSDN 页面上的完整详细信息。

于 2012-05-29T16:37:54.363 回答
0

@Nilish:“候选键”是您决定将哪些列用作主键时使用的术语。而 SQL 对此一无所知。我不知道“备用键”是什么意思,只是它是另一组可能用于主键的列。

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

一个表要么没有索引(堆),要么没有唯一的聚集索引,或者有唯一的聚集索引。没有其他可能性。(主键通常是唯一的聚集索引。)

于 2012-06-15T18:55:04.143 回答