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 JOIN
přesVALUES
doložka - (pouze rychlejší pro velmi velké seznamy hodnot):
COPY
hodnot do dočasné tabulky, indexujte ji aJOIN
na 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: