影響資料庫效能最大的因素莫過於索引設計。SQL Server 提供兩大主要索引類型:叢集索引 與 非叢集索引。選擇時需綜合考量資料類型、欄位特性、查詢模式及最高頻查詢類型。
當欄位儲存高度相關的資料且常按順序存取時,叢集索引是最佳選擇。SQL Server 會在物理上依遞增(預設)或遞減順序重新排列資料列,使範圍查詢與排序操作極為高效。因物理排序唯一,每張資料表僅能擁有一個叢集索引。
若欄位資料相關性較低,非叢集索引更合適。單張資料表最多可建立 249 個非叢集索引(實務上很少用到這麼多)。主鍵預設會自動建立唯一叢集索引;外鍵若常用於連接查詢,建議在外鍵欄位上建立非叢集索引。
建立索引時,SQL Server 會建立資料頁作為加速搜尋的指標,並設定填充因子 指示資料頁填滿百分比。隨著資料更新,頁面剩餘空間耗盡會導致頁面分裂,造成索引碎片、查詢效能下降。填充因子在建立索引時一次設定,無法動態維護。
建議定期監控碎片程度,選擇適當策略;重要系統請謹慎安排維護窗口。
SQL Server 根據索引統計資料動態選擇執行計畫。隨著資料異動,統計資料會「過期」。可用 DBCC SHOWCONTIG 檢視狀態,執行 UPDATE STATISTICS 刷新統計資訊,確保最佳化器擁有最新資訊。
SQL Server 內建資料庫維護計畫精靈 (DMPW),可排程自動更新索引統計資料、重新組織資料與資料頁(重建索引並指定填充因子),大幅減輕手動維護負擔。