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

SQL Server 索引完整指南:架構、建立、分析與維護

     編輯:SQL Server 2005

索引核心概念

資料庫索引如同書本目錄,對資料表一或多個欄位值進行排序,提供快速定位特定列的能力。

優點

  • 大幅加速查詢速度(主要引入原因)
  • 唯一性索引保證資料唯一
  • 加速資料表聯結(參考完整性)
  • 優化 GROUP BY、ORDER BY 操作

缺點

  • 佔用實體空間(叢集索引佔用更大)
  • 建立與維護耗費時間,隨資料量增長而增加
  • INSERT/UPDATE/DELETE 需同步維護索引,增加系統負擔

索引分類

依儲存結構

類型特性限制
叢集索引資料實體儲存順序與索引順序完全一致;兩層架構:索引頁 + 資料頁每個資料表僅能建立 一個
非叢集索引邏輯順序與實體儲存順序分離;葉層包含資料列指標每個資料表最多 249 個 (SQL 2005) / 999 個 (SQL 2008+)
非叢集索引架構示意圖

依鍵值特性

  • 唯一索引:鍵值唯一,可建立於非主鍵欄位
  • 複合索引:多欄位組合建立,欄位順序影響查詢效能

建立索引原則

  • 僅資料表擁有者可建立
  • 經常查詢的欄位(WHERE、JOIN、ORDER BY)優先建立
  • text、image、bit 資料類型無法建立索引
  • 外鍵欄位建議建立索引;主鍵自動建立叢集索引
  • 重複值極高、查詢極少的欄位勿建立索引

三種建立方式

  1. SSMS 圖形介面:資料表 → 索引 → 右鍵「新增索引」
  2. T-SQL CREATE INDEX
  3. CREATE/ALTER TABLE 定義約束:主鍵/唯一約束自動建立對應索引

T-SQL CREATE INDEX 語法

CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED] INDEX 索引名稱
ON <物件> (欄位 [ASC | DESC] [,...n])
[ INCLUDE (欄位名稱 [,...n]) ]
[ WITH (<索引選項> [,...n]) ]
[ ON 檔案群組名稱 ]
範例:
USE db_student;
CREATE CLUSTERED INDEX zindex ON course(課程代號);

索引查看、修改、刪除

操作SSMST-SQL
查看資料表 → 索引 → 屬性EXEC sp_helpindex '資料表名稱'
修改索引屬性 → 重建/重組ALTER INDEX ALL ON course REBUILD WITH (FILLFACTOR=80)
刪除右鍵索引 → 刪除DROP INDEX course.zindex

索引分析與維護

分析工具

  • SET SHOWPLAN_ALL ON / SET SHOWPLAN_XML ON:顯示執行計畫(不執行)
  • SET STATISTICS IO ON:顯示邏輯/實體讀取統計

維護指令

指令用途語法範例
DBCC SHOWCONTIG顯示資料與索引碎片資訊DBCC SHOWCONTIG('course', 'zindex') WITH FAST
DBCC DBREINDEX重建一或多個索引(離線)DBCC DBREINDEX('dbo.course', 'zindex', 80)
DBCC INDEXDEFRAG線上整理碎片(SQL 2005/2008)DBCC INDEXDEFRAG(db_id, object_id, index_id)
ALTER INDEX ... REBUILD重建索引(支援 ONLINE=ON,Enterprise 版)ALTER INDEX ALL ON course REBUILD WITH (ONLINE=ON)
ALTER INDEX ... REORGANIZE重組索引葉層(線上、輕量)ALTER INDEX ALL ON course REORGANIZE

維護策略建議

  • 碎片率 5-30%:REORGANIZE(線上、低影響)
  • 碎片率 > 30%:REBUILD(完全重建,可選 ONLINE)
  • 定期排程維護計畫執行,搭配 FILLFACTOR 預留空間減少分頁分裂
  • 監控 sys.dm_db_index_physical_stats 動態管理檢視追蹤碎片狀態

掌握索引架構、建立原則、分析工具與維護策略,才能讓索引真正為查詢效能服務,而非成為系統負擔。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved