In grove volgorde van langzamer naar sneller:
- 200 individuele zoekopdrachten, elk in hun eigen transactie
- 200 individuele zoekopdrachten, allemaal in één transactie
- 1 grote vraag met
WHERE ... IN (...)ofWHERE EXISTS (SELECT ...) - 1 grote vraag met een
INNER JOINover eenVALUESclausule - (alleen sneller voor zeer grote zoeklijsten):
COPYwaardelijst naar een tijdelijke tabel, indexeer deze enJOINop de tijdelijke tafel.
Als je honderden waarden gebruikt, raad ik je echt aan mee te doen via een VALUES clausule. Voor vele duizenden waarden, COPY naar een tijdelijke tabel en indexeer deze en doe er vervolgens mee.
Een voorbeeld van deelname aan een waardenclausule. Gezien deze IN vraag:
SELECT *
FROM mytable
WHERE somevalue IN (1, 2, 3, 4, 5);
het equivalent met VALUES is:
SELECT *
FROM mytable
INNER JOIN (
VALUES (1), (2), (3), (4), (5)
) vals(v)
ON (somevalue = v);
Houd er echter rekening mee dat het gebruik van VALUES deze manier is een PostgreSQL-extensie, waar IN , of het gebruik van een tijdelijke tabel, is standaard SQL.
Zie deze gerelateerde vraag: