为啥声明表变量与临时表相比非常慢?
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 ()表变量