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 JOINmelaluiVALUESklausa - (hanya lebih cepat untuk daftar nilai yang sangat besar):
COPYdaftar nilai ke tabel temp, indeks, danJOINdi 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: