T-SQL视图/计算链

时间:2018-03-23 17:35:03

标签: sql performance tsql stored-procedures view

这两个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
    • 中选择

1 个答案:

答案 0 :(得分:2)

嵌套视图对性能很糟糕。请参阅此StackExchange帖子以及此RedGate帖子。既然你只标记了TSQL,我只是从SQL Server视图来说。

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

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

您可能应该研究的是常见的表表达式和临时表。由于您声明表格很大,您可能还需要考虑creating indexes on your temporary tables,这会提高非物质化视图的性能。