2012-05-24 111 views
1

好吧,預計執行計劃顯示需要的索引?

我不知道我是不是瘋了,但沒有估計的執行計劃用來顯示你需要什麼索引來提高你的表現?我曾經在我以前的工作中這樣做過,但現在看來我不得不使用調優顧問。我不介意調音顧問,但我以前的做法非常簡單!

感謝

回答

7

在這兩個SSMS 2008年和2012年SSMS看到這是工作的罰款都估計和實際的計劃。

下面是一個簡單的例子表明,估計和實際的執行計劃均會顯示在缺少索引:

USE tempdb; 
GO 

CREATE TABLE dbo.smorg(blamp INT); 
GO 

INSERT dbo.smorg(blamp) SELECT n FROM 
(
    SELECT ROW_NUMBER() OVER (ORDER BY c1.object_id) 
    FROM sys.all_objects AS c1, sys.all_objects AS c2 

) AS x(n); 
GO 

現在強調這一點,並選擇估計的執行計劃,或將實際執行計劃和命中執行:

SELECT blamp FROM dbo.smorg WHERE blamp BETWEEN 100 AND 105; 

您應該看到缺少索引建議。你會看到它代表了這裏:

SELECT * 
    FROM sys.dm_db_missing_index_details 
    WHERE [object_id] = OBJECT_ID('dbo.smorg'); 

你可以閱讀更多關於這裏的DMV:

http://msdn.microsoft.com/en-us/library/ms345434.aspx

你也應該調查SQL Sentry Plan Explorer(聲明:我SQL哨兵工作)。這是一個免費的工具,它顯示了估計計劃的缺失索引(如果它們在SQL Server提供的XML中),沒有像SSMS這樣的錯誤(它在多個批次中重複相同的建議,即使批次不提及相同的表格),並生成實際執行計劃而不是將所有結果通過網絡提交給客戶端 - 它只是丟棄它們(因此網絡和數據開銷不計入計劃分析)。

+0

好的,但我很接近。它與我正在尋找的對比使用調優顧問。 – Limey

+1

hmmmm ....我試過了,它沒有顯示需要的索引。我甚至吹響了一個主鍵來確保。 – Limey

+1

實際執行計劃沒有顯示缺少索引?也許是因爲missing_indexes DMV不知道索引丟失,或者因爲計劃太平凡了,優化器不認爲索引會有用。僅僅因爲你的表沒有聚集索引並不意味着每個查詢都會從其中受益。你有沒有手動查看'sys.dm_db_missing_index_details'來查看這個表是否在那裏被提及?這是計劃中的信息來自... –