В PostgreSQL общие табличные выражения (CTE) - это оптимизационные заграждения. Это означает, что CTE материализуется в память и что предикаты из другого запроса никогда не будут вдавлены в CTE.
Теперь мне интересно, будут ли другие метаданные об CTE, такие как упорядочение, разделяться на другие запросы. Возьмем следующий запрос:
WITH ordered_objects AS
(
SELECT * FROM object ORDER BY type ASC LIMIT 10
)
SELECT MIN(type) FROM ordered_objects
Здесь MIN(type)
, очевидно, всегда является первой строкой ordered_objects
(или NULL
если ordered_objects
пусты), поскольку ordered_objects
уже упорядочены по type
. Доступны ли эти знания о ordered_objects
при оценке SELECT MIN(type) FROM ordered_objects
?