0

我继承了一个现有的系统,并试图弄清楚一些事情。

系统做了一个

SELECT * FROM v_myView WHERE mvViewCol = 'someValue'

并根据v_myView_Table1myViewCol

SQL Server 2005 是优化查询还是总在整个查询中发生求和Table1

我知道我可以使用参数化视图,但不想进行不必要的更改。

干杯杰夫

4

3 回答 3

2

视图根本没有运行时成本。它们总是内联到周围的查询中,就像您将视图定义粘贴为文本一样。否则它们将是不切实际的。

SQL Server (2005) 是否优化查询或将总和始终发生在整个 Table1 中。

它将被优化。

于 2013-01-21T23:18:07.077 回答
1

这是一个复杂的问题。我认为最好的解释在这里。我希望微软文档在这一点上更清楚一点。

创建视图时,会解析查询。这确保它是正确的。

执行计划在第一次运行查询时确定(非常接近)。然后,此执行计划保留在计划缓存中以供后续调用。因此,如果您在适当的列上有一个索引,并且第一次执行有一个where将使用该索引的子句,那么后续调用也将使用该索引。

我说的很接近,因为当计划不在计划缓存中时,这确实是第一次调用视图。对数据库的某些更改将刷新计划,重新启动服务器也是如此。

因此,如果您仅使用该where子句访问视图,则视图的后续使用将为此目的进行优化。

于 2013-01-21T23:26:59.877 回答
0

SQL Server 2005 将在查询中每次引用它时优化视图:http ://technet.microsoft.com/en-us/library/cc917715.aspx

“视图扩展后,SQL Server 查询优化器为正在执行的查询编译单个执行计划。”

我没有安装 2005,但它的操作类似于 2008R2 - 要查看查询优化计划,请在查询窗口中右键单击并选择“显示估计的执行计划”以获取更多信息并发现任何瓶颈。

在 Query 菜单选项中,有“Analyse Query in Database Tuning Advisor”可能对您也有帮助。

于 2013-01-21T23:22:28.347 回答