私の理解では、WITH ステートメント (CTE) はクエリごとに 1 回実行されます。次のようなクエリを使用します。
WITH Query1 AS ( ... )
SELECT *
FROM
SomeTable t1
LEFT JOIN Query1 t2 ON ...
これが100行になる場合、Query1100回ではなく、1回だけ実行されたと思います。この仮定が正しければ、クエリ全体を実行するのにかかる時間は、実行Query1+ から選択するSomeTable+ に結合するSomeTableのにかかる時間とほぼ同じQuery1です。
私は次のような状況にいます:
Query1単独で実行すると、約 5 秒 (400k 行) かかります。WITHステートメントを削除した後のクエリの残りの部分と、LEFT JOIN約 15 秒 (400k 行) かかります。
したがって、WITHステートメントとそのLEFT JOIN場でクエリ全体を実行すると、クエリがタイムリーに完了すると予想されていましたが、代わりに1時間以上実行し、停止すると11,000行しか取得できませんでした.
私は明らかに間違っていますが、なぜですか?
