2
一時テーブルは、熱心なスプールよりもハロウィーンの問題に対するより効率的なソリューションであるのはなぜですか?
行がターゲットテーブルにない場合にのみソーステーブルから行を挿入する次のクエリを検討してください。 INSERT INTO dbo.HALLOWEEN_IS_COMING_EARLY_THIS_YEAR WITH (TABLOCK) SELECT maybe_new_rows.ID FROM dbo.A_HEAP_OF_MOSTLY_NEW_ROWS maybe_new_rows WHERE NOT EXISTS ( SELECT 1 FROM dbo.HALLOWEEN_IS_COMING_EARLY_THIS_YEAR halloween WHERE maybe_new_rows.ID = halloween.ID ) OPTION (MAXDOP 1, QUERYTRACEON 7470); 考えられる1つの形状には、マージ結合と積極的なスプールが含まれます。ハロウィーンの問題を解決するために、熱心なスプールオペレーターがいます。 私のマシンでは、上記のコードは約6900ミリ秒で実行されます。テーブルを作成するための再現コードは、質問の下部に含まれています。パフォーマンスに不満がある場合は、熱心なスプールに頼るのではなく、一時テーブルに挿入される行をロードしようとするかもしれません。可能な実装の1つを次に示します。 DROP TABLE IF EXISTS #CONSULTANT_RECOMMENDED_TEMP_TABLE; CREATE TABLE #CONSULTANT_RECOMMENDED_TEMP_TABLE ( ID BIGINT, PRIMARY KEY (ID) ); INSERT INTO #CONSULTANT_RECOMMENDED_TEMP_TABLE …