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 JOIN
su unVALUES
clausola - (più veloce solo per elenchi di valori molto grandi):
COPY
lista valori in una tabella temporanea, indicizzarla eJOIN
sul 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: