最近我才意识到现在可以在SQL Server中索引视图(请参见http://technet.microsoft.com/en-us/library/cc917715.aspx)。现在,我正在尝试弄清楚针对已经缓存执行路径的存储过程内部的相同查询与针对已索引视图的查询哪个性能更好?
以以下为例:
SELECT colA, colB, sum(colC), sum(colD), colE
FROM myTable
WHERE colFDate < '9/30/2011'
GROUP BY colA, colB, colE
每次运行日期都会不同,因此,如果这是一个视图,我不会将
WHERE
包含在视图中,而是作为我的选择部分来对视图进行选择。如果它是存储过程,则日期将是参数。请注意,该表中有约30万行。其中20万个满足日期的where子句。在group by之后将返回1万个。如果这是一个索引视图,我应该期望获得比已经有机会缓存执行路径的存储过程更好的性能吗?还是过程会更快?还是差异可以忽略不计?我知道我们可以说“只是尝试两者”,但有太多的因素可能会错误地偏向结果,导致我得出错误的结论,所以我想听听更多的理论背景和预期结果。
谢谢!
colA,colB,colE
组平均有多少行? - Martin SmithcolA,colB,colE
每个日期只有1-2行?在这种情况下,与第一种情况相比,“GROUP BY colA,colB,colE,Date”的好处大大降低了! - Martin Smith