Sql-Server
聚集索引誤解
我讀過幾篇文章,聚集索引與表相同,或者如果您使用聚集索引閱讀,則您擁有整個記錄。有人說,聚集索引將整個記錄儲存在最深的索引葉子中。
對我來說很模糊,聚集索引是否有數據副本?!當然不是,但我不明白人們為什麼這麼說。
我讀了幾篇文章,但我仍然不清楚。聚集索引是虛擬的嗎?它是否使用 B-Tree 結構(如非聚集索引)?
是否有描述 SQL Server 如何儲存/管理聚集索引的示意圖或模型?
有人說,集群索引將整個記錄儲存在索引的最深葉子中。
是的,這是正確的。聚集索引的葉頁包含實際的表行。這是實際數據。在其他地方沒有其他原始副本。
葉頁還分配幾個字節來保存索引鍵順序中下一頁和前一頁的地址(文件和頁面),以形成雙向鍊錶。根據碎片級別,按照鍵順序跟隨索引可能與按照物理順序跟隨索引相同,也可能不同。
各個葉頁上的行可能不會在物理上完全按照索引鍵順序寫入,但頁上的插槽數組及其包含的行的指針是按鍵順序排序的。
它是否使用 B-Tree 結構(如非聚集索引)?
只要表格不適合單個頁面,那麼葉子上方就會有一個或多個級別的 B 樹。這些更高的級別包含索引鍵值和指向以下級別中的頁面的指針,以允許有效地查找鍵值。這也與非聚集索引中使用的原理完全相同。
聚集索引的葉級頁被歸類為數據頁,非葉頁被歸類為索引頁。但是數據頁仍然是索引的一部分。
(圖片來源)
另請參閱我對 Stack Overflow 上相關問題的回答: