【问题标题】:What is the benefits of "Declare @TableName" over "Create Table TableName"?“Declare @TableName”优于“Create Table TableName”有什么好处?
【发布时间】:2015-10-21 16:53:11
【问题描述】:

我在工作中分配了一项提高绩效的任务。 我们正在运行 SQL Server 2012。数据库有许多具有数百万行的表,报告需要 30 多分钟才能查看结果。

运行包含执行计划的存储过程表明,在“声明@T 表”以及插入和从中选择期间消耗了大约 98%。经过几个小时的试验和错误,我将这部分更改为“创建表 T”,并将创建的表放在 Proc 的末尾。

结果很迷人。现在只需不到 10 分钟即可检索数据。 任何人都可以解释为什么会发生这种情况?

我不知道我是否需要继续使用这种方法,或者我还有其他事情需要注意。

【问题讨论】:

    标签: sql sql-server database sql-server-2012 sqlperformance


    【解决方案1】:

    百分比只是估计值,基于行数估计值 - 这可能是您的问题。表变量没有统计信息,因此大多数情况下 SQL Server 估计表中有 1 行。

    如果您在连接或类似的情况下使用这些表变量,则查询计划可能非常糟糕,因为对行数的估计错误。

    如果没有理由使用表变量,您应该首先尝试使用正常温度。表(#tableName)。如果这些表中有很多行,创建索引也可能是个好主意。

    比较查询计划,估计行数和统计信息输出应该让您大致了解执行之间的区别。不要太相信百分比,这可能是完全错误的,但统计信息 io 是可以信任的(除非你也在那里使用多语句 UDF)

    【讨论】:

      猜你喜欢
      • 2011-01-27
      • 2010-11-22
      • 2020-04-07
      • 1970-01-01
      • 2017-07-09
      • 1970-01-01
      • 1970-01-01
      • 2017-05-23
      • 1970-01-01
      相关资源
      最近更新 更多