Widzę częste odniesienia do WITH
zapytań (wspólne wyrażenia tabelowe lub CTE), które działają jak płot optymalizacyjny, w którym serwer nie może wypychać filtrów w dół do zapytań CTE, wyciągać typowe wyrażenia z CTE itp. być zachowaniem wymaganym przez standardy SQL.
CTE są zdecydowanie ogrodzeniem optymalizacyjnym w PostgreSQL ... ale czy jest to wymagane przez standard, czy właściwie tylko szczegóły implementacji?
Na przykład te posty na liście adresowej twierdzą lub sugerują, że jest to standard:
Po wspomnieniu o tym w komentarzu zapytano mnie, gdzie jest ono określone - i po spojrzeniu na jedyną wersję SQL: 2008 mam dostęp do, że nie mam szczęścia znaleźć.
Nie intensywnie jeszcze przestudiowałem standardu, więc mam nadzieję na sugestię kogoś, kto ma: Czy ogrodzenie optymalizacyjne CTE w PostgreSQL jest rzeczywiście wymagane przez standard? A jeśli tak, to gdzie to jest określone? A może oświadczenia na liście mailingowej PG są błędne?
Zobacz także wątek Optymalizacja CTE na liście zadań? .
STABLE
lubIMMUTABLE
działają.