PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Добавянето на външни таблици в клаузи WITH забавя ли заявка в PostgreSQL?

можете да използвате Обяснение, за да покажете как оптимизаторът на заявки ще се справи с вашата заявка.

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

В горния случай PSQL трябва да види, че temp3 не се използва и да не го включва.

като използвам вашия пример по-горе на един мой 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)

няма да забележите, че не се споменава temp3. В отговор на вашата редакция, защо не влияе на времето за заявка, оптимизаторът е достатъчно умен, за да види, че не се използва и не си прави труда да го изчислява. Оттук и причината да е оптимизатор.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да отмените завъртане на таблица в PostgreSQL

  2. RDSdataService execute_statement връща (BadRequestException)

  3. Postgresql:объркване в име на таблица/схема

  4. Автоматично връщане назад в postgre с използване на PDO

  5. Добавяне на име на таблица към всяка колона в набор от резултати в SQL? (По-специално Postgres)