索引是關聯式資料庫效能的核心杠桿。本文系統性解析叢集索引、非叢集索引、覆蓋索引、篩選索引的設計原則、適用場景與避坑指南。
BETWEEN, >, <)、GROUP BY/ORDER BY 叢集鍵、JOIN 叢集鍵。CREATE INDEX IX_Orders_CustDate_Cover
ON dbo.Orders (CustomerID, OrderDate)
INCLUDE (OrderID, TotalAmount, Status);
-- 查詢:SELECT OrderID, TotalAmount, Status FROM Orders WHERE CustomerID = 123 AND OrderDate > '2024-01-01'
-- 無需鍵查閱,極速
CREATE INDEX IX_Orders_Active
ON dbo.Orders (OrderDate)
WHERE Status = 'Active'; -- 僅索引 20% 活躍訂單
IsDeleted = 0)。sys.dm_db_index_usage_stats 找出 **未被使用索引** (user_seeks/scans/lookups = 0) → 評估刪除。sys.dm_db_index_physical_stats 檢測碎片 > 30% → REBUILD;10~30% → REORGANIZE。UPDATE STATISTICS / AUTO_UPDATE_STATISTICS_ASYNC 保持統計鮮度。sys.dm_db_missing_index_details 但**人工審核**後再建立。索引非越多越好,而是「精準、覆蓋、篩選、維護」四字訣。以查詢負載為導向,建立最小必要索引集合,配合自動化碎片與統計維護,持續榨取硬體效能。