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就使用它們。

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

相關問題