为什么更新视图会导致加速?

时间:2010-10-04 10:16:49

标签: sql-server performance

我们对特定查询有一种特殊情况。

此查询连接到一个视图,该视图在某些数据上创建PIVOT。

现在我们发现这个查询有时会运行得很慢(10秒)。我还没有掌握如何以缓慢的方式再现它。

但是,当它运行缓慢时,我们可以删除并重新创建查询中加入的View,这将使查询再次快速运行(<1秒)。现在,此UPDATE VIEW不会以任何方式更改视图的实际架构。

我很困惑。关于可能会发生什么的任何想法?

在重新创建可以加速查询的视图时会发生什么?

2 个答案:

答案 0 :(得分:3)

这听起来像parameter sniffing

在娱乐方面,这是一个新对象和一个新计划。即使视图已展开,查询文本也会引用视图,它与之前的视图不同

答案 1 :(得分:0)

我以前见过这个问题,这是一个奇怪的问题。重新创建视图时会发生什么,SQL Server会重新创建视图使用的查询执行计划。随着时间的推移,视图中的查询可能在具有错误索引的表上具有连接,因此索引上的SQL统计信息实际上开始降低性能而不是帮助它。因此,一旦重新创建视图,SQL Server现在会使用给定的统计信息为视图确定最佳查询执行计划,这就是您再次看到视图运行速度更快的原因。然后,一旦表统计开始增加,视图开始降低性能,因为SQL Server不知道运行查看的查询执行计划的最佳方法。我建议您查看视图中的表,并调查正在使用的表的连接和索引。如果在不同的查询窗口中执行视图的内容,则可以比较视图运行的查询的估计查询执行计划,以及视图使用的估计查询执行计划。有了它,您可以识别有问题的查询。