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ặcWHERE EXISTS (SELECT ...) - 1 truy vấn lớn với
INNER JOINtrênVALUESmệnh đề - (chỉ nhanh hơn đối với danh sách giá trị rất lớn):
COPYdanh sách giá trị cho một bảng tạm thời, lập chỉ mục nó vàJOINtrê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: