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 JOINponadVALUESklauzula - (szybciej tylko w przypadku bardzo dużych list wartości):
COPYlista wartości do tabeli tymczasowej, zindeksuj ją iJOINna 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: