Sie haben das Missverständnis, dass der Optimierer die SQL-Anweisung umschreibt. Das ist nicht der Fall. Das Umschreiben der Abfrage ist die Aufgabe des Query Rewriter , die beispielsweise Views durch ihre Definition ersetzt. Der Optimierer erstellt eine Folge von Ausführungsschritten, um das Ergebnis zu berechnen. Es erstellt einen Plan , keine SQL-Anweisung.
Der Optimierer sieht zwei Alternativen vor:Entweder Unterplan 1 für jede gefundene Zeile ausführen oder Unterplan 2 einmal ausführen (beachten Sie, dass er unabhängig von a
ist ), erstellen Sie eine Hash-Tabelle aus dem Ergebnis und prüfen Sie diesen Hash für jede Zeile, die in a
gefunden wird .
Zur Ausführungszeit entscheidet sich PostgreSQL für letztere Strategie, weshalb Teilplan 1 nie ausgeführt wird.