【问题标题】:SQL View optimisationSQL 视图优化
【发布时间】:2013-01-22 14:01:50
【问题描述】:

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

系统做了一个

SELECT * FROM v_myView WHERE mvViewCol = 'someValue'

v_myView基于myViewColTable1求和

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

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

干杯 杰夫

【问题讨论】:

  • 您可以尝试构建查询执行计划,看看发生了什么。
  • SQL Server 中没有参数化视图。
  • 感谢亚伦的指正。我应该说'内联表值函数'

标签: sql sql-server sql-server-2005 optimization


【解决方案1】:

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

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

会优化的。

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2018-12-25
        • 1970-01-01
        • 1970-01-01
        • 2016-02-23
        • 2015-02-10
        • 1970-01-01
        • 2012-01-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多