PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

A adição de tabelas estranhas em cláusulas WITH diminui a velocidade de uma consulta no PostgreSQL?


você pode usar Explicar para mostrar como o otimizador de consulta tratará sua consulta.

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

No caso acima o PSQL deve ver que o temp3 não é usado e não o inclui.

usando seu exemplo acima em um dos meus 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)

você não notará nenhuma menção a temp3. Ao responder à sua edição, sobre por que ela não afeta o tempo de consulta, o otimizador é inteligente o suficiente para ver que não é usado e não se incomoda em computar. Daí a razão de ser um otimizador.