Dalam urutan kasar dari lebih lambat ke lebih cepat:
- 200 kueri individual, masing-masing dalam transaksinya sendiri
- 200 kueri individual, semuanya dalam satu transaksi
- 1 kueri besar dengan
WHERE ... IN (...)
atauWHERE EXISTS (SELECT ...)
- 1 kueri besar dengan
INNER JOIN
melaluiVALUES
klausa - (hanya lebih cepat untuk daftar nilai yang sangat besar):
COPY
daftar nilai ke tabel temp, indeks, danJOIN
di atas meja sementara.
Jika Anda menggunakan ratusan nilai, saya sangat menyarankan untuk bergabung melalui VALUES
ayat. Untuk ribuan nilai, COPY
ke tabel temp dan mengindeksnya lalu bergabung di atasnya.
Contoh bergabung pada klausa nilai. Mengingat ini IN
permintaan:
SELECT *
FROM mytable
WHERE somevalue IN (1, 2, 3, 4, 5);
setara dengan VALUES
adalah:
SELECT *
FROM mytable
INNER JOIN (
VALUES (1), (2), (3), (4), (5)
) vals(v)
ON (somevalue = v);
Namun, perhatikan bahwa menggunakan VALUES
cara ini adalah ekstensi PostgreSQL, sedangkan IN
, atau menggunakan tabel sementara, adalah standar SQL.
Lihat pertanyaan terkait ini: