mun*_*sor 13 performance sql-server-2005 temporary-tables
我在 SQL Server 2005 中遇到以下问题:与使用临时表的相同插入相比,尝试将一些行插入表变量需要大量时间。
这是插入表变量的代码
DECLARE @Data TABLE(...)
INSERT INTO @DATA( ... )
SELECT ..
FROM ...
Run Code Online (Sandbox Code Playgroud)
这是插入临时表的代码
CREATE #Data TABLE(...)
INSERT INTO #DATA( ... )
SELECT ..
FROM ...
DROP TABLE #Data
Run Code Online (Sandbox Code Playgroud)
临时表没有任何键或索引,2次查询的select部分相同,select返回的结果数为~10000行。单独执行选择所需的时间约为 10 秒。
执行临时表版本最多需要 10 秒,我不得不在 5 分钟后停止表变量版本。
我必须使用表变量,因为查询是表值函数的一部分,不允许访问临时表。
表变量版本的执行计划
临时表版本的执行计划
两种方案的明显区别在于,快的是并行,慢的是串行。
这是插入表变量的计划的局限性之一。正如评论中提到的(似乎它具有预期的效果)你可以尝试做
INSERT INTO @DATA ( ... )
EXEC('SELECT .. FROM ...')
Run Code Online (Sandbox Code Playgroud)
看看这是否绕过了限制。
归档时间: |
|
查看次数: |
9610 次 |
最近记录: |