PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

L'ajout de tables superflues dans une clause WITH ralentit-il une requête dans PostgreSQL ?

vous pouvez utiliser Expliquer pour montrer comment l'optimiseur de requête traitera votre requête.

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

Dans le cas ci-dessus, PSQL devrait voir que temp3 n'est pas utilisé et ne pas l'inclure.

en utilisant votre exemple ci-dessus sur une de mes bases de données.

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)

vous ne remarquerez aucune mention de temp3. En répondant à votre modification, sur la raison pour laquelle cela n'affecte pas le temps de requête, l'optimiseur est suffisamment intelligent pour voir qu'il n'est pas utilisé et ne se soucie pas de le calculer. D'où la raison pour laquelle il s'agit d'un optimiseur.