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 JOIN
trênVALUES
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: