我處於一種情況,我必須提高用於報告的大約75個存儲過程(由其他人創建)的性能。我的解決方案的第一部分是創建大約6個非規範化表格,這些表格將用於大部分報告。現在我已經創建了表格,我有一些艱鉅的任務來確定我應該創建哪些索引以最好地改善這些存儲過程的性能。有關確定需要創建哪些索引的任何建議?
我很好奇,看看有沒有人有任何建議找到哪些列將有意義包括在索引中?我已經考慮使用Profiler/DTA,或者可能會像下面這樣查詢某種查詢來找出流行的列。
SELECT name, Count(so.name) as hits, so.xtype
from syscomments as sc
INNER JOIN sysobjects so ON sc.id=so.id
WHERE sc.text like '%ColumnNamme%'
AND xtype = 'P'
Group by name,so.xtype
ORDER BY hits desc
讓我知道如果你有任何想法,可以幫助我不必手工挖掘這75個過程。
此外,插入僅在這個DB上每天執行一次,所以插入性能對我來說不是一個大問題。
是的,這是我正在考慮的選項之一。我聽到很多人都說你不應該依靠這種方法來生成你的索引。 – 2010-01-13 21:20:36
我已經做了相當多的調整,這是我用過的一個很成功的方法。從探查器中,您可以獲得各種有用的信息,尤其是CPU和磁盤IO使用情況。這將告訴你哪些SP最慢(或者至少可以從調優中獲益最多)。然後,您可以打開這些查詢並查看查詢計劃 - 雖然有人真的瞭解Sql查詢計劃嗎? – MrTelly 2010-01-13 21:41:29
聽起來好像大多數人認爲使用profiler/dta來了解我需要的索引是個好主意。在我的生產服務器上運行Profiler幾個小時可以期待什麼樣的問題? – 2010-01-13 21:58:30