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

Vấn đề về hiệu suất trong truy vấn cập nhật

Theo thứ tự sơ bộ từ chậm hơn đến nhanh hơn:

  • 200 truy vấn riêng lẻ, mỗi truy vấn trong giao dịch của riêng chúng
  • 200 truy vấn riêng lẻ, tất cả trong một giao dịch
  • 1 truy vấn lớn với WHERE ... IN (...) hoặc WHERE EXISTS (SELECT ...)
  • 1 truy vấn lớn với INNER JOIN trên VALUES mệnh đề
  • (chỉ nhanh hơn đối với danh sách giá trị rất lớn):COPY danh sách giá trị cho một bảng tạm thời, lập chỉ mục nó và JOIN trên bàn tạm thời.

Nếu bạn đang sử dụng hàng trăm giá trị, tôi thực sự khuyên bạn nên tham gia hơn VALUES mệnh đề. Đối với nhiều nghìn giá trị, COPY vào một bảng tạm thời và lập chỉ mục nó, sau đó tham gia vào bảng đó.

Một ví dụ về việc tham gia vào một mệnh đề giá trị. Đưa ra IN này truy vấn:

SELECT *
FROM mytable
WHERE somevalue IN (1, 2, 3, 4, 5);

tương đương với VALUES là:

SELECT *
FROM mytable
INNER JOIN (
  VALUES (1), (2), (3), (4), (5)
) vals(v)
ON (somevalue = v);

Tuy nhiên, lưu ý rằng sử dụng VALUES theo cách này là một phần mở rộng PostgreSQL, wheras IN hoặc sử dụng bảng tạm thời là tiêu chuẩn SQL.

Xem câu hỏi liên quan này:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để bạn viết một truy vấn không phân biệt chữ hoa chữ thường cho cả MySQL và Postgres?

  2. Tạo số lượng vé mở theo thời gian, ngày mở và đóng cửa đã cho

  3. Hàm Postgres tạo nhưng không thực thi

  4. Rails 3.1:Truy vấn Postgres cho các bản ghi trong một phạm vi thời gian

  5. Nhận giá trị nối tiếp mặc định sau khi INSERT bên trong PL / pgSQL