本文將深入探討 SQL Server 中的強制索引查詢技巧,並介紹 Columnstore Index(列存儲索引)的核心概念與適用場景。內容精簡但深度解析,助您掌握索引優化的關鍵要點。
在 SQL Server 中,查詢優化器通常會自動選擇最優執行計劃,但某些情況下開發人員需手動指定索引以獲得更好性能。以下通過實例演示四種強制索引方式。
USE TSQL2012 GO SELECT * FROM Sales.Orders

預設情況下,SQL Server 會使用主鍵建立的聚集索引執行全表掃描,這是最基礎的查詢方式。
USE TSQL2012 GO SELECT custid FROM Sales.Orders WITH(INDEX(idx_nc_custid))

透過 WITH(INDEX(索引名)) 語法,可強制查詢使用特定非聚集索引,適用於已知某索引效能優於預設計劃的場景。
USE TSQL2012 GO SELECT custid FROM Sales.Orders WITH (INDEX(idx_nc_custid)) INNER JOIN Sales.OrderDetails WITH (INDEX(PK_OrderDetails)) ON Sales.OrderDetails.orderid = Sales.Orders.orderid GO

在表連接時,可為每張表單獨指定索引,這是較推薦的強制索引寫法,可見度高且易維護。
USE TSQL2012 GO SELECT custid FROM Sales.Orders AS SO INNER JOIN Sales.OrderDetails AS SOD ON SOD.orderid = SO.orderid OPTION (TABLE HINT(SO, INDEX(idx_nc_custid)), TABLE HINT(SOD, INDEX(PK_OrderDetails))) GO

注意: 此方式會覆蓋優化器的預設最優計劃,僅建議經驗豐富的 DBA 在確定能提升效能時使用。SQL Server 2008+ 才支援此語法。
Columnstore Index 自 SQL Server 2012 引入,專為大數據分析查詢設計。其核心優勢在於:

硬體需求方面,列存儲索引依賴大量記憶體進行壓縮/解壓運算,部署時請確保充足 RAM 與快速儲存裝置。
強制索引是效能調優的「核武器」,需謹慎使用;Columnstore Index 則是大數據分析的「利器」,選對版本與場景事半功倍。實戰中建議:先觀察執行計劃,再決定是否干預優化器選擇。