首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

深度解析 SQL Server 索引架構:叢集與非叢集索引的 B-Tree 結構差異

     編輯:關於SqlServer

索引的核心價值

索引如同書本目錄,避免全表掃描,加速資料檢索。SQL Server 提供兩大類索引:叢集索引與非叢集索引,皆採用 B-Tree 平衡樹結構組織。

儲存基礎:資料頁

  • 資料檔案邏輯劃分為連續編號的頁(8 KB),I/O 以頁為單位。
  • 叢集索引的葉層即為資料頁本身;非叢集索引葉層為索引頁,指向資料列(透過 RID 或叢集鍵)。

叢集索引架構與特性

CREATE CLUSTERED INDEX IX_UserAddDate ON ASPNet_zSurvey.ZS_User (UserAddDate ASC);
  • 資料依叢集鍵邏輯排序(非物理連續儲存)。
  • 每個資料表僅能有一個叢集索引。
  • 葉層 = 資料頁,大小約佔資料表 5%。
  • 適合範圍查詢(BETWEEN、>、<)、JOIN、ORDER BY/GROUP BY 欄位。
  • 不適合:頻繁更新的鍵值(導致頁分裂)、寬鍵(放大非叢集索引體積)。

非叢集索引架構與差異

  • 資料列不依非叢集鍵排序儲存。
  • 葉層為索引頁,包含索引鍵值 + 書籤(叢集鍵或 RID)。
  • 可建立多個非叢集索引(SQL 2008+ 上限 999)。
  • 適合高選擇性點查詢、覆蓋索引(INCLUDE 欄位避免書籤查找)。

圖解結構差異

叢集索引 B-Tree 結構

非叢集索引 B-Tree 結構

設計原則速查

場景建議索引類型
主鍵、範圍掃描、頻繁排序叢集索引
外鍵 JOIN、高選擇性點查、覆蓋查詢非叢集索引
大量 INSERT/UPDATE 鍵值欄位避免叢集索引
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved