为啥声明表变量与临时表相比非常慢?

Posted

技术标签:

【中文标题】为啥声明表变量与临时表相比非常慢?【英文标题】:Why Declare Table Variable is very slow compared to Temporary Table?为什么声明表变量与临时表相比非常慢? 【发布时间】:2014-01-23 10:31:02 【问题描述】:

我的后台进程是批量更新/插入数据。我需要在临时表中存储一些数据以备后用。我有 5 个临时表。如果我使用临时表(CREATE TABLE #T),则需要 2-3 秒,但如果我使用表变量(DECLARE @T TABLE),则需要 90 多秒。这是一个示例临时表,

CREATE TABLE #TempAttributes
(
    AID int
    ,PID int
    ,ATypeValue nvarchar(MAX)
    ,ATypeKey nvarchar(MAX)
    ,PLanguageID int
);

为什么表变量很慢?

【问题讨论】:

TempTbl-TblVar@Martin Smith 写的帖子非常简洁详细,应该是你要找的。​​span> 【参考方案1】:

我猜是因为表变量插入不支持并行计划。

并行查询处理是在 MsSql 中实现的并行查询的优化过程,临时表从中受益,而表变量则没有。

这是我们不对大量数据使用表变量的主要原因之一(当范围无关紧要时)。

查看here了解更多信息。

【讨论】:

以上是关于为啥声明表变量与临时表相比非常慢?的主要内容,如果未能解决你的问题,请参考以下文章

在某些情况下,为什么CTE(公用表表达式)与SQL Server中的临时表相比会减慢查询速度

create table #temptable 临时表 和 declare @bianliang table ()表变量

从视图插入临时表非常慢

SQL Server 内存优化表 - 与临时表相比性能较差

Sql Server内存优化表-与临时表相比性能较差

使用表变量或临时表遍历数据