叢集索引結構

在 SQL Server 中,索引的結構為 B 型樹狀目錄。索引 B 型樹狀目錄中的每個分頁稱為索引節點。B 型樹狀目錄的頂部節點稱為根節點。索引中的底層節點稱為分葉節點。根與分葉節點之間的任何索引層級通稱為中繼層級。在叢集索引中,分葉節點包含基礎資料表的資料頁。根和中繼層級節點包含保存索引資料列的索引頁。每個索引資料列都包含索引鍵值,以及指向 B 型樹狀目錄之中繼層級分頁或索引分葉層級之資料列的指標。索引每個層級中的分頁都以雙向連結串列方式連結。

對於索引所使用的每個資料分割,叢集索引在 sys.partitions 中都有一個 index_id = 1 的資料列。根據預設,叢集索引只有一個資料分割。當叢集索引有多個資料分割時,每個資料分割都有一個 B 型樹狀目錄結構來包含該特定資料分割的資料。例如,如果叢集索引有四個資料分割,則共有四個 B 型樹狀目錄結構,每個資料分割中各一個。

視叢集索引中的資料類型而定,每個叢集索引結構會有一或多個配置單位來儲存並管理特定資料分割的資料。在每個叢集索引中,每個資料分割至少會有一個 IN_ROW_DATA 配置單位。如果叢集索引包含大型物件 (LOB) 資料行,則在每個叢集索引中,每個資料分割也會一個 LOB_DATA 配置單位。如果叢集索引包含可變長度資料行,而該資料行又超過 8,060 個位元組的資料列大小限制,則每個資料分割也會有一個 ROW_OVERFLOW_DATA 配置單位。如需有關配置單位的詳細資訊,請參閱<資料表與索引組織>。

資料鏈結中的分頁,以及它們裡面的資料列將以叢集索引鍵的值來排列。所有插入動作都會等到插入之資料列的索引鍵值符合它在現有資料列的排列順序時才發生。分頁指標會在 sys.system_internals_allocation_units 系統檢視中錨定 B 型樹狀目錄的分頁集合。

重要事項重要事項

sys.system_internals_allocation_units 系統檢視僅保留給 Microsoft SQL Server 內部使用。我們無法保證未來的相容性。

對於叢集索引,sys.system_internals_allocation_units 中的 root_page 資料行會指向特定資料分割的叢集索引頂端。SQL Server 會沿著索引下移,尋找與叢集索引鍵對應的資料列。為了找出索引鍵範圍,SQL Server 會在索引中移動,以找出範圍中的開始索引鍵值,然後使用上一個或下一個指標來掃描資料頁。為了找出資料頁鏈結中的第一個分頁,SQL Server 會依循索引根節點的最左邊指標。

下圖顯示單一資料分割中的叢集索引結構。

叢集索引的層級