du kan använda Explain för att visa hur frågeoptimeraren kommer att hantera din fråga.
http://www.postgresql.org/docs/9.2/static /sql-explain.html
I fallet ovan bör PSQL se att temp3 inte används och inte inkludera det.
använder ditt exempel ovan på en min dbs.
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)
du kommer inte att märka något omnämnande av temp3. När du svarar på din redigering, om varför det inte påverkar frågetiden, är optimeraren smart nog att se att den inte används och inte bryr sig om att beräkna den. Därav anledningen till att det är en optimerare.