PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Verlangsamt das Hinzufügen von irrelevanten Tabellen in einer WITH-Klausel eine Abfrage in PostgreSQL?

Sie können Explain verwenden, um zu zeigen, wie der Abfrageoptimierer Ihre Abfrage verarbeitet.

http://www.postgresql.org/docs/9.2/static /sql-explain.html

Im obigen Fall sollte PSQL sehen, dass temp3 nicht verwendet wird, und es nicht einschließen.

Verwenden Sie Ihr obiges Beispiel auf einer meiner Datenbanken.

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)

Sie werden keine Erwähnung von temp3 bemerken. Bei der Beantwortung Ihrer Bearbeitung, warum es die Abfragezeit nicht beeinflusst, ist der Optimierer intelligent genug, um zu sehen, dass es nicht verwendet wird, und macht sich nicht die Mühe, es zu berechnen. Daher ist es ein Optimierer.