如何通过使用或不使用表变量来提高性能

gar*_*rik 6 performance sql-server-2008 execution-plan

我有一个表变量:

DECLARE @to_process TABLE 
(
    [Id] [bigint] NOT NULL,
    [SequenceId] [bigint] NOT NULL,
...
)


INSERT INTO @to_process
   (  Id
    , SequenceId
...
   )
  SELECT
    TOP (@recordsToProcess) 
      Id
    , SequenceId
...
Run Code Online (Sandbox Code Playgroud)

在我的存储过程中。我调查过插入到其中花费了大约 66% 的总执行时间。 在此处输入图片说明

如何改进或优化我的代码以加速我的 sp 执行?

添加:

在此处输入图片说明

gbn*_*gbn 7

第一个想到...

如果您有足够的数据来获取这么多百分比的批次,请使用 #temptable。

以后使用表变量时,总是假设有一行:没有关于这个表变量的统计信息。因此,如果您有 1000 个,后续计划将不会是最佳的。

临时表具有统计信息(如果需要,还有索引等)并且可以更好地处理较大的数据集