I grov rækkefølge af langsommere til hurtigere:
- 200 individuelle forespørgsler, hver i deres egen transaktion
- 200 individuelle forespørgsler, alt i én transaktion
- 1 stor forespørgsel med
WHERE ... IN (...)ellerWHERE EXISTS (SELECT ...) - 1 stor forespørgsel med en
INNER JOINover enVALUESklausul - (kun hurtigere for meget store lister med værdier):
COPYværdiliste til en midlertidig tabel, indekser den ogJOINpå vikarbordet.
Hvis du bruger hundredvis af værdier, foreslår jeg virkelig, at du deltager over en VALUES klausul. For mange tusinde værdier, COPY til en midlertidig tabel og indekser den, og kom derefter til den.
Et eksempel på tilslutning til en værdisætning. Givet denne IN forespørgsel:
SELECT *
FROM mytable
WHERE somevalue IN (1, 2, 3, 4, 5);
tilsvarende med VALUES er:
SELECT *
FROM mytable
INNER JOIN (
VALUES (1), (2), (3), (4), (5)
) vals(v)
ON (somevalue = v);
Bemærk dog, at du bruger VALUES denne måde er en PostgreSQL-udvidelse, mens IN , eller ved at bruge en midlertidig tabel, er SQL-standard.
Se dette relaterede spørgsmål: