SQL Server - 有没有办法加快TVF中表变量的插入速度?

时间:2016-02-19 23:33:49

标签: sql sql-server sql-server-2012 table-variable

我的查询大约需要6秒钟。目前,它输出大约1500条记录,然后插入表变量中。插入表中需要花费7秒钟。

如果我使用临时表尝试相同的操作,插入只需要大约一秒钟。

问题是查询被放置在TVF内部(并且对该功能存在很多依赖性,因此将其转换为存储过程并不是最理想的分辨率)因此我无法使用临时表。

有没有办法加快插入表变量的速度?我使用的是SQL Server 2012,因此内存优化的表变量也不是一个选项。

非常感谢任何建议,谢谢!

编辑(附加信息):

我尝试了类似于显示here的方法的CTE方法,并且开销类似于使用临时表方法,现在查询大约需要8秒。这些表变量有三个(每个都有一个略有不同的输出),因此组合起来,查询总共大约需要24秒,这对于我们使用它来说是完全可以接受的。

2 个答案:

答案 0 :(得分:1)

您可以在批量插入之前停止创建索引,并在插入

后启用它们
role="listbox"

答案 1 :(得分:0)

鉴于存储结果表变量的最终目标是执行隔离查询并将它们连接起来提供输出,使用CTE的以下方法与查询开销时间相同(或者甚至更快)与临时表一起使用:

;WITH CTE1 as
(
    --Query 1 (took 6 seconds)
),
CTE2 as
(
    --Query 2 (took 6 seconds)
),
CTE3 as
(
    --Query 3 (took 8 seconds)
)
SELECT cte1.fielda, cte2.fieldb, cte3.fieldc, ...
FROM cte1
JOIN cte2 on cte1.fieldx = cte2.fieldx
JOIN cte3 on cte1.fieldx = cte3.fieldx

-- Total duration 20 seconds
-- Took 39 seconds previously