在我正在進行的一個專案中,有一張表有大約一百萬條記錄。為了獲得更好的性能,我創建了一個非聚集索引并將sid欄位定義為索引鍵列。當我執行這個查詢
SELECT [id]
,[sid]
,[idm]
,[origin]
,[status]
,[pid]
FROM [EpollText_Db].[dbo].[PhoneNumbers] where sid = 9

執行計劃如上圖。我的問題是,為什么 SQL Server 忽略sid 索引,而是掃描整百萬條記錄來查找查詢結果。非常感謝您的幫助
uj5u.com熱心網友回復:
我相信問題出在結果的大小上。index seek您正在從資料庫中選擇一萬條記錄,如果您考慮包含操作的必要查詢計劃,這將是相當多的。該計劃包括index seek將是這樣的

因此,將包括一萬個密鑰查找和大量隨機邏輯訪問。因此,如果您的表行很小,他可以決定使用聚集索引掃描。如果您真的關心此查詢的性能,請創建一個覆寫索引:
CREATE INDEX idx_PhoneNumbers_sid
ON [EpollText_Db].[dbo].[PhoneNumbers](sid)
INCLUDE ([id],[idm],[origin],[status],[pid])
但是,這可能會減慢插入、洗掉和更新的速度,并且還可能使表的大小增加一倍。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/416747.html
標籤:
上一篇:具有2個值的SQLOery引數
