#TEMP_TABLE
整数のインデックス付きフィールドを持つ元のテーブルがあり、それを関連フィールドのID
別のテーブルに結合してフィルタリングする必要があります。これは、いくつかの条件によってフィルタリングされます。これらの条件はループで提供されます。ループの最後で、フィルター処理された結果を元の #TEMP_TABLE に戻す必要があります。FILTER
ID_R
WHILE
だから現在、私は次のようなことをしています
WHILE [loop condition]
BEGIN
SELECT #TEMP_TABLE.ID INTO #TMP_FILTERED_TABLE
FROM #TEMP_TABLE INNER JOIN FILTER ON #TEMP_TABLE.ID = FILTER.ID_R
WHERE FILTER.FIELD1 = [parameter1 from loop] AND FILTER.FIELD2 = [parameter2 from loop]
TRUNCATE TABLE #TEMP_TABLE
INSERT INTO #TEMP_TABLE (ID)
SELECT ID FROM #TMP_FILTERED_TABLE
DROP TABLE #TMP_FILTERED_TABLE
END -- END LOOP
FILTER テーブルは非常に大きいため、JOIN は二重のタスクを実行します。FILTER を ID によってより小さいサブセットに制限し、FILTER が独自の WHERE 句によってフィルタリングされると、出力結果が制限されます。#TEMP_TABLE が小さくなるため、ループが進むにつれて結果が小さくなります。
要件は、ループの最終結果が元の #TEMP_TABLE にあることです。
これを行うためのより良い、より最適な、最適化された方法はありますか?