bạn có thể sử dụng Giải thích để hiển thị cách trình tối ưu hóa truy vấn sẽ xử lý truy vấn của bạn.
http://www.postgresql.org/docs/9.2/static /sql-explain.html
Trong trường hợp trên PSQL sẽ thấy rằng temp3 không được sử dụng và không bao gồm nó.
bằng cách sử dụng ví dụ của bạn ở trên trên một dbs của tôi.
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)
bạn sẽ nhận thấy không có đề cập đến temp3. Khi trả lời chỉnh sửa của bạn, về lý do tại sao nó không ảnh hưởng đến thời gian truy vấn, trình tối ưu hóa đủ thông minh để thấy rằng nó không được sử dụng và không bận tâm đến việc tính toán nó. Do đó, lý do nó là một trình tối ưu hóa.