sql server语言 - sql视图优化



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

系统执行

SELECT * FROM v_myView WHERE mvViewCol = 'someValue'
v_myView基于myViewColTable1进行求和

SQL Server 2005是否对查询进行了优化,还是会在整个Table1中进行求和?

我明白我可以使用参数化视图,但不想做不必要的改变。

干杯Geoff

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

SQL Server(2005)是否对查询进行了优化,还是会在整个表中进行求和?

将被优化

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

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

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

我说

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

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

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

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

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

在查询菜单选项中,有"在数据库调优顾问中分析查询",这可能对您也有好处。

最新更新