非聚集索引是指一種索引類型,在這種索引中,索引的邏輯順序與其在磁盤上的實際物理存儲順序并不一致。
特征
非聚集索引具有B樹結構,但它與聚集索引相比有兩個顯著區別:首先,數據行并非按照非聚集索引鍵的順序進行排序和存儲。其次,非聚集索引的葉子節點不包含數據頁,而是包含索引行。每條索引行包括非聚集鍵值以及一個或多個行定位器,這些行定位器指向含有相應鍵值的數據行。如果索引是非唯一的,行定位器可能指向多行。非聚集索引可以建立在帶有聚集索引的表、堆集或索引視圖之上。在微軟? SQL Server? 2000中,非聚集索引中的行定位器有兩種形式:對于堆集表(無聚集索引),行定位器是指向行的指針,由文件標識符(ID)、頁碼和頁上的行號組成,構成完整的行ID。而對于擁有聚集索引的表或索引視圖,行定位器則是行的聚集索引鍵。如果聚集索引不是唯一的,SQL Server 2000會自動添加內部生成的值以確保非聚集索引內的鍵唯一性。這些內部生成的值對用戶不可見,僅用于保持非聚集索引內的鍵唯一性。SQL Server通過使用聚集索引鍵查找聚集索引來獲取數據行,而聚集索引鍵則保存在非聚集索引的葉子行中。由于非聚集索引將聚集索引鍵作為其行指針存儲,因此保持聚集索引鍵盡可能小非常重要。如果表還包含非聚集索引,請勿選擇較大的列作為聚集索引的鍵。
應用實例
漢語字典的正文部分實際上就是一個聚集索引的例子。在字典中查找某個漢字時,我們通常會根據其拼音首字母的位置快速翻閱相應的頁面。例如,“安”字因其拼音“an”位于“A”區,所以會在字典的前部找到;而“張”字因其拼音“zhang”位于“Z”區,所以我們會在字典的后部尋找。這種直接在正文內容中查找的方式,無需額外查閱目錄,是因為正文內容本身就按照一定的規則有序排列,形成了一個目錄,即聚集索引。需要注意的是,每個表只能有一個聚集索引,因為目錄只能按照一種方式進行排序。
參考資料 >
什么是聚集索引和非聚集索引?.csdn.2024-11-02
非聚集索引結構.microsoft.2024-11-02
Mysql - 聚集索引與非聚集索引的區別.博客園.2024-11-02