オプティマイザがSQLステートメントを書き換えるという誤解があります。そうではありません。クエリの書き換えは、クエリリライタの仕事です。 、たとえば、ビューをその定義に置き換えます。オプティマイザーは、結果を計算するための一連の実行ステップを考え出します。 計画を作成します 、SQLステートメントではありません。
オプティマイザーは2つの選択肢を計画します。見つかった行ごとにサブプラン1を実行するか、サブプラン2を1回実行します(a
から独立していることに注意してください)。 )、結果からハッシュテーブルを作成し、a
で見つかった各行のハッシュを調べます。 。
実行時に、PostgreSQLは後者の戦略を使用することを決定します。そのため、サブプラン1は実行されません。