与临时表相比,为什么声明表变量非常慢?

use*_*567 5 sql sql-server sql-server-2014

我的后台进程是批量更新/插入数据.我需要在临时表中存储一些数据供以后使用.我有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
);
Run Code Online (Sandbox Code Playgroud)

为什么表变量很慢?

Ath*_*ras 1

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

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

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

请参阅此处了解更多信息。