PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Czy dodanie zbędnych tabel w klauzulach WITH spowalnia zapytanie w PostgreSQL?

możesz użyć funkcji Wyjaśnij, aby pokazać, jak optymalizator zapytań obsłuży Twoje zapytanie.

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

W powyższym przypadku PSQL powinien zobaczyć, że temp3 nie jest używany i nie uwzględniać go.

używając powyższego przykładu na jednym z moich baz danych.

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)

nie zauważysz żadnej wzmianki o temp3. Odpowiadając na twoją edycję, o tym, dlaczego nie ma to wpływu na czas zapytania, optymalizator jest na tyle sprytny, że widzi, że nie jest używany i nie zawraca sobie głowy jego obliczaniem. Stąd powód, dla którego jest optymalizatorem.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. FULL OUTER JOIN do łączenia tabel z PostgreSQL

  2. Błąd narzędzi Eclipse/Hibernacja:wpis ścieżki klasy archiwum nie istnieje

  3. Oblicz dokładną różnicę miesięcy między dwiema datami

  4. Czym dokładnie jest GRANT USAGE ON SCHEMA?

  5. C# i PostgreSQL