首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与"Create Table TableName“相比,"Declare @TableName”的好处是什么?

与"Create Table TableName“相比,"Declare @TableName”的好处是什么?
EN

Stack Overflow用户
提问于 2015-10-22 00:53:12
回答 1查看 287关注 0票数 0

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

在包含执行计划的情况下运行存储的Proc显示,在"Declare @T Table“和插入并从中选择期间消耗了大约98%。经过几个小时的试验和错误,我将这一部分更改为“创建表T”,并在过程结束时删除了创建的表。

结果是迷人的。现在,检索数据只需不到10分钟。谁能给我解释一下发生这种情况的原因?

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

EN

回答 1

Stack Overflow用户

发布于 2015-10-22 01:00:04

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

如果您在joins或类似的东西中使用这些表变量,查询计划可能会因为对行数的错误估计而变得非常糟糕。

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33265013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档