W przybliżonej kolejności od wolniejszego do szybszego:
- 200 indywidualnych zapytań, każde we własnej transakcji
- 200 indywidualnych zapytań, wszystkie w jednej transakcji
- 1 duże zapytanie z
WHERE ... IN (...)
lubWHERE EXISTS (SELECT ...)
- 1 duże zapytanie z
INNER JOIN
ponadVALUES
klauzula - (szybciej tylko w przypadku bardzo dużych list wartości):
COPY
lista wartości do tabeli tymczasowej, zindeksuj ją iJOIN
na stole tymczasowym.
Jeśli używasz setek wartości, naprawdę sugeruję dołączenie do VALUES
klauzula. W przypadku wielu tysięcy wartości COPY
do tabeli tymczasowej i zindeksuj ją, a następnie dołącz do niej.
Przykład łączenia na klauzulę wartości. Biorąc pod uwagę to IN
zapytanie:
SELECT *
FROM mytable
WHERE somevalue IN (1, 2, 3, 4, 5);
odpowiednik z VALUES
jest:
SELECT *
FROM mytable
INNER JOIN (
VALUES (1), (2), (3), (4), (5)
) vals(v)
ON (somevalue = v);
Pamiętaj jednak, że przy użyciu VALUES
w ten sposób jest rozszerzeniem PostgreSQL, gdzie IN
lub użycie tabeli tymczasowej jest standardem SQL.
Zobacz to powiązane pytanie: