Ich sehe häufige Verweise auf WITH
Abfragen (allgemeine Tabellenausdrücke oder CTEs), die als Optimierungsbereich fungieren und bei denen der Server keine Filter in die CTE-Abfragen hineinschieben, allgemeine Ausdrücke aus dem CTE herausziehen usw. Es wird oft behauptet ein von den SQL-Standards gefordertes Verhalten sein.
CTEs sind definitiv ein Optimierungsfaktor in PostgreSQL ... aber wird dies vom Standard verlangt oder sind es eigentlich nur Implementierungsdetails?
Diese Mailinglisten-Posts behaupten beispielsweise, dass es sich um Standard handelt, oder schlagen dies vor:
Nachdem ich es in einem Kommentar erwähnt hatte, wurde ich gefragt, wo es angegeben ist - und nach einem Blick auf den einzigen Entwurf von SQL: 2008 habe ich Zugriff darauf, dass ich nicht viel Glück habe, es zu finden.
Ich habe mich noch nicht intensiv mit dem Standard befasst und hoffe daher auf einen Vorschlag von jemandem, der Folgendes getan hat: Ist die Optimierung der CTEs in PostgreSQL tatsächlich vom Standard vorgeschrieben? Und wenn ja, wo ist es angegeben? Oder sind die Aussagen auf der Pg-Mailingliste fehlerhaft?
Siehe auch den Thread CTE Optimization Fence auf der ToDo-Liste? .
STABLE
oderIMMUTABLE
funktionieren.