我有Log和LogItem表;我正在編寫一個查詢來從兩者中獲取一些數據。有成千上萬的Logs
每個Log
最多可以有125 LogItems
當現有索引包含新索引中的所有列時,爲什麼創建此新索引會提高性能?
查詢有問題是複雜的,所以我跳過它(如果有人認爲這是重要的我也許可以將它張貼),但是當我跑SSMS估計的查詢計劃,它告訴我一個新的非聚集索引可以將性能提高到100%。
Existing Index: Non-clustered
Key Colums (LogItem): ParentLogID, DateModified, Name, DatabaseModified
Query Plan Recommendation
CREATE NONCLUSTERED INDEX [LogReportIndex]
ON [dbo].[LogItem] ([ParentLogID],[DatabaseModified])
只是爲了好玩,我創造了這個新的指標和運行查詢和出乎我的意料,現在只需約1秒我的查詢運行時之前是10+秒。
我認爲我現有的索引會覆蓋這個新的查詢,所以我的問題是爲什麼在我的新查詢中使用的唯一列上創建新索引可以提高性能?我應該爲我的where
子句中使用的每列唯一組合索引有索引嗎?
注意:我不認爲這是因爲SQL Server緩存了我的結果,我在創建索引之前運行了大約25-30次的查詢,並且它在索引之後持續了10-15秒現在一直是〜1或更少。
在創建附加非聚集索引之前,*實際執行計劃*顯示的索引用法是什麼? – 2011-12-19 18:14:24
什麼是提高100%的性能? – JeffO 2011-12-19 18:16:23
@Shark好問題,我不確定。這是我第一次進行性能調試。我一定會抓住這一點。它所說的只是'缺少索引',它說了哪些字段。 – Nate 2011-12-19 18:19:09