In ordine approssimativo da più lento a più veloce:
- 200 query singole, ciascuna nella propria transazione
- 200 query singole, tutte in un'unica transazione
- 1 grande query con
WHERE ... IN (...)oWHERE EXISTS (SELECT ...) - 1 grande query con un
INNER JOINsu unVALUESclausola - (più veloce solo per elenchi di valori molto grandi):
COPYlista valori in una tabella temporanea, indicizzarla eJOINsul tavolo temporaneo.
Se stai usando centinaia di valori, ti suggerisco davvero di unirti su un VALUES clausola. Per molte migliaia di valori, COPY in una tabella temporanea e indicizzarla, quindi unirti a essa.
Un esempio di unione su una clausola di valori. Dato questo IN domanda:
SELECT *
FROM mytable
WHERE somevalue IN (1, 2, 3, 4, 5);
l'equivalente con VALUES è:
SELECT *
FROM mytable
INNER JOIN (
VALUES (1), (2), (3), (4), (5)
) vals(v)
ON (somevalue = v);
Tieni presente, tuttavia, che utilizzando VALUES in questo modo è un'estensione PostgreSQL, mentre IN , o l'utilizzo di una tabella temporanea, è lo standard SQL.
Vedi questa domanda correlata: