我处于一种情况,我必须提高用于报告的大约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