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 JOIN
over enVALUES
klausul - (kun hurtigere for meget store lister med værdier):
COPY
værdiliste til en midlertidig tabel, indekser den ogJOIN
på 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: