PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Việc thêm các bảng không liên quan trong mệnh đề WITH có làm chậm truy vấn trong PostgreSQL không?

bạn có thể sử dụng Giải thích để hiển thị cách trình tối ưu hóa truy vấn sẽ xử lý truy vấn của bạn.

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

Trong trường hợp trên PSQL sẽ thấy rằng temp3 không được sử dụng và không bao gồm nó.

bằng cách sử dụng ví dụ của bạn ở trên trên một dbs của tôi.

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)

bạn sẽ nhận thấy không có đề cập đến temp3. Khi trả lời chỉnh sửa của bạn, về lý do tại sao nó không ảnh hưởng đến thời gian truy vấn, trình tối ưu hóa đủ thông minh để thấy rằng nó không được sử dụng và không bận tâm đến việc tính toán nó. Do đó, lý do nó là một trình tối ưu hóa.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ràng buộc kiểm tra PostgreSQL trong Liquibase

  2. PostgreSQL ngược LIKE

  3. Tìm nguồn truy vấn thông qua pgbouncer

  4. Kiểm tra nhanh nhất nếu hàng tồn tại trong PostgreSQL

  5. Cách thay đổi trường id đánh số tự động thành kiểu nối tiếp trong PostgreSQL