możesz użyć funkcji Wyjaśnij, aby pokazać, jak optymalizator zapytań obsłuży Twoje zapytanie.
http://www.postgresql.org/docs/9.2/static /sql-explain.html
W powyższym przypadku PSQL powinien zobaczyć, że temp3 nie jest używany i nie uwzględniać go.
używając powyższego przykładu na jednym z moich baz danych.
explain with temp1 as (select * from cidrs), temp2 as (select * from contacts), temp3 as ( select * from accounts ) select * from temp1 join temp2 on temp1.id = temp2.id;
QUERY PLAN
---------------------------------------------------------------------
Hash Join (cost=22.15..25.44 rows=20 width=4174)
Hash Cond: (temp1.id = temp2.id)
CTE temp1
-> Seq Scan on cidrs (cost=0.00..11.30 rows=130 width=588)
CTE temp2
-> Seq Scan on contacts (cost=0.00..10.20 rows=20 width=3586)
-> CTE Scan on temp1 (cost=0.00..2.60 rows=130 width=588)
-> Hash (cost=0.40..0.40 rows=20 width=3586)
-> CTE Scan on temp2 (cost=0.00..0.40 rows=20 width=3586)
(9 rows)
nie zauważysz żadnej wzmianki o temp3. Odpowiadając na twoją edycję, o tym, dlaczego nie ma to wpływu na czas zapytania, optymalizator jest na tyle sprytny, że widzi, że nie jest używany i nie zawraca sobie głowy jego obliczaniem. Stąd powód, dla którego jest optymalizatorem.