V hrubém pořadí od pomalejšího po rychlejší:
- 200 jednotlivých dotazů, každý ve své vlastní transakci
- 200 jednotlivých dotazů, vše v jedné transakci
- 1 velký dotaz s
WHERE ... IN (...)neboWHERE EXISTS (SELECT ...) - 1 velký dotaz s
INNER JOINpřesVALUESdoložka - (pouze rychlejší pro velmi velké seznamy hodnot):
COPYhodnot do dočasné tabulky, indexujte ji aJOINna dočasném stole.
Pokud používáte stovky hodnot, opravdu doporučuji spojení přes VALUES doložka. Pro mnoho tisíc hodnot COPY do dočasné tabulky a indexovat ji a poté se k ní připojit.
Příklad spojení na klauzuli hodnot. Vzhledem k tomuto IN dotaz:
SELECT *
FROM mytable
WHERE somevalue IN (1, 2, 3, 4, 5);
ekvivalent s VALUES je:
SELECT *
FROM mytable
INNER JOIN (
VALUES (1), (2), (3), (4), (5)
) vals(v)
ON (somevalue = v);
Pamatujte však, že pomocí VALUES tímto způsobem je rozšíření PostgreSQL, kde je IN , nebo pomocí dočasné tabulky, je standard SQL.
Viz tato související otázka: