アップデート
これを聞くのは時期尚早だったと思います。さらにいくつかのテストを行った後、パフォーマンスが向上していないことがわかりました。さらにいくつかのテストを実行し、ここに更新を投稿します。それまでは、わざわざこれに答えないでください。
こんなお問い合わせがありました…
SELECT DISTINCT TOP 11 [Field_A]
FROM [#TempTable]
WHERE [Field_A] NOT IN (SELECT bo.[Id]
FROM [BusinessObject_Table] bo
UNION
SELECT boTemp.[Id]
FROM [#BusinessObject_Table] boTemp)
このクエリは、かなりのデータ セットに対して実行するのに非常に時間がかかります。また、一時テーブルの Id 列に CLUSTERED インデックスを追加しました。これにより、パフォーマンスがいくらか向上しましたが、それでも完了しませんでした。
このクエリをこれに置き換えました...
SELECT DISTINCT TOP 11 [Field_A]
FROM [#TempTable]
WHERE [Field_A] NOT IN (SELECT bo.[Id]
FROM [BusinessObject_Table] bo)
AND [Field_A] NOT IN (SELECT boTemp.[Id]
FROM [#BusinessObject_Table] boTemp)
これは数秒で完了しました。誰かがここで何が起こったのか説明できますか?
更新: 両方のクエリは同じだと思いました。これが必要です。
BusinessObject_Table has following Ids: 1, 2, 3
#BusinessObject_Table has: 3, 4, 5
TempTable has rows whose Field_A values are: 1, 2, 3, 4, 6
クエリの結果は次のようになります: 6 (上記のクエリの変更に注意してください)
クエリプランを取得して、ここに投稿しようとします。