SQL Server 2005で次の問題が発生しています。テーブル変数にいくつかの行を挿入しようとすると、一時テーブルを使用した同じ挿入に比べて時間がかかります。
これはテーブル変数に挿入するコードです
DECLARE @Data TABLE(...)
INSERT INTO @DATA( ... )
SELECT ..
FROM ...
これは一時テーブルに挿入するコードです
CREATE #Data TABLE(...)
INSERT INTO #DATA( ... )
SELECT ..
FROM ...
DROP TABLE #Data
一時テーブルにはキーまたはインデックスがなく、選択部分は2つのクエリで同じであり、選択によって返される結果の数は最大10000行です。選択のみを実行するのに必要な時間は、約10秒です。
一時テーブルバージョンの実行には最大10秒かかります。5分後にテーブル変数バージョンを停止する必要がありました。
クエリはテーブル値関数の一部であり、一時テーブルへのアクセスを許可しないため、テーブル変数を使用する必要があります。
テーブル変数バージョンの実行計画
一時テーブルバージョンの実行計画
2つのプランの明らかな違いは、高速の方が並列で、低速の方が直列であることです。
これは、テーブル変数に挿入するプランの制限の1つです。コメントで述べたように(そしてそれが望ましい効果を持っているように見えます)あなたはやってみることができます
INSERT INTO @DATA ( ... )
EXEC('SELECT .. FROM ...')
それが制限を回避するかどうかを確認します。