一、理解索引的結構
索引在數據庫中的作用類似於目錄在書籍中的作用,用來提高查找信息的速度。使用索引查找數據,無需對整表進行掃描,可以快速找到所需數據。微軟的SQL SERVER提供了兩種索引:聚集索引(clustered index,也稱聚類索引、簇集索引)和非聚集索引(nonclustered index,也稱非聚類索引、非簇集索引)。
SQL Server 中數據存儲的基本單位是頁(Page)。數據庫中的數據文件(.mdf 或 .ndf)分配的磁盤空間可以從邏輯上劃分成頁(從 0 到 n 連續編號)。磁盤 I/O 操作在頁級執行。也就是說,SQL Server 每次讀取或寫入數據的最少數據單位是數據頁。
下面我們先簡單的了解一下索引的體系結構:
1. 聚集索引結構
在 SQL Server 中,索引是按 B 樹結構進行組織的。
聚集索引單個分區中的結構:
--建立UserAddDate聚集索引
CREATE CLUSTERED INDEX [IX_UserAddDate] ON [ASPNet_zSurvey].[ZS_User]
(
[UserAddDate] ASC
)
聚集索引(Clustered Index)特點
聚集索引的葉節點就是實際的數據頁
聚集索引中的排序順序僅僅表示數據頁鏈在邏輯上是有序的。而不是按照順序物理的存儲在磁盤上
行的物理位置和行在索引中的位置是相同的
每個表只能有一個聚集索引
聚集索引的平均大小大約為表大小的5%左右
2.非聚集索引結構
非聚集索引與聚集索引具有相同的 B 樹結構,它們之間的顯著差別在於以下兩點:
1. 基礎表的數據行不按非聚集鍵的順序排序和存儲。
2. 非聚集索引的葉層是由索引頁而不是由數據頁組成。
下圖示意了單個分區中的非聚集索引結構: