堆積結構
堆積是一種沒有叢集索引的資料表。對於堆積所使用的每個資料分割,堆積在 sys.partitions 中都有一個資料列,其 index_id = 0。依預設,堆積只有一個資料分割。當堆積有多個資料分割時,每個資料分割都有一個堆積結構來包含該特定資料分割的資料。例如,如果堆積有四個資料分割,則有四個堆積結構;每個資料分割中各有一個堆積結構。
視堆積中的資料類型而定,每個堆積結構都會有一或多個配置單位來儲存和管理特定資料分割的資料。在每個堆積中,每個資料分割至少會有一個 IN_ROW_DATA 配置單位。如果堆積包含大型物件 (LOB) 資料行,則在每個堆積中,每個資料分割也會有一個 LOB_DATA 配置單位。如果堆積包含可變長度資料行,而該資料行又超過 8,060 個位元組的資料列大小限制,則每個資料分割也會有一個 ROW_OVERFLOW_DATA 配置單位。如需配置單位的詳細資訊,請參閱<資料表與索引組織>。
sys.system_internals_allocation_units 系統檢視中的 first_iam_page 資料行會指向 IAM 頁面鏈結中的第一個 IAM 頁面,該 IAM 頁面可用來管理配置給堆積中特定資料分割的空間。SQL Server 會使用 IAM 頁面在整個堆積中移動。資料頁以及其中的資料列並沒有特定順序,也不會連結在一起。資料頁之間的唯一邏輯連接為 IAM 頁面中所記錄的資訊。
![]() |
---|
sys.system_internals_allocation_units 系統檢視僅保留給 MicrosoftSQL Server 內部使用。我們無法保證未來的相容性。 |
堆積的資料表掃描或循序讀取可以藉著掃描 IAM 頁面找出包含堆積頁面的範圍來執行。因為 IAM 會以範圍存在於檔案中的順序來表示它們,這代表循序的堆積掃描都將依檔案順序進行。使用 IAM 分頁設定掃描順序也表示堆積中的資料列通常不會依插入順序傳回。
下圖顯示「SQL Server Database Engine」是如何使用 IAM 頁面來擷取單一資料分割堆積中的資料列。