我最近才意识到您现在可以在 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
在视图中,而是将其作为我对视图的选择的一部分。如果它是一个存储过程,则日期将是一个参数。请注意,表中有大约 300,000 行。其中 200,000 人将满足带有日期的 where 条款。10,000 将在分组后返回。
如果这是一个索引视图,我是否应该期望从中获得比有机会缓存执行路径的存储过程更好的性能?还是proc会更快?或者差异可以忽略不计?我知道我们可以说“两者都试一试”,但是有太多因素可能会使结果产生错误的偏差,导致我得出错误的结论,所以我想听听更多背后的理论以及预期的结果是什么.
谢谢!