【问题标题】:T-SQL Chain of Views / CalculationsT-SQL 视图链/计算
【发布时间】:2018-09-02 11:19:27
【问题描述】:

这两个 tsql 工作流是等效的还是存储过程更好? 表格很大,每个“步骤”都有些复杂,需要计算和连接多个视图。

我基本上是在问 where 子句位于视图/计算链的末尾还是开头是否重要。

最后一步的 3 个视图链 where 子句。

  • Step1View = 从表格中选择
  • Step2View = 从@Step1View 中选择
  • Step3View = 从@Step2View 中选择
  • 从 Step3View 中选择,其中 x=1 和 y=2 和 z = 3

包含所有步骤的单个存储过程,第一步带有 where 子句。

  • 存储过程:
    • @Step1View = 从 x=1 和 y=2 和 z = 3 的表中选择
    • @Step2View = 从@Step1View 中选择
    • @Step3View = 从@Step2View 中选择
    • 从@Step3View 中选择

【问题讨论】:

    标签: sql performance tsql stored-procedures view


    【解决方案1】:

    嵌套视图不利于性能。请参阅此StackExchange 帖子和此RedGate 帖子。而且由于您只标记了 TSQL,因此我仅从 SQL Server 视图中发言。

    但要回答你的问题,是的,where 子句的放置会改变性能,原因有很多,包括:

    • 限制需要返回的行数从而减少内存
    • 减少稍后必须在查询中加入/过滤掉的行数,从而减少 CPU 和内存
    • 限制由于数据尚未在内存中而增加 I/O 的可能性

    您可能应该研究的是公用表表达式和临时表。由于您说这些表很大,您可能还需要考虑creating indexes on your temporary tables,这将提高非实体化视图的性能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-22
      • 1970-01-01
      • 2011-01-11
      • 2017-02-09
      • 2016-06-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多