sql >> Database teknologi >  >> RDS >> PostgreSQL

Ydeevneproblem i opdateringsforespørgsel

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 (...) eller WHERE EXISTS (SELECT ...)
  • 1 stor forespørgsel med en INNER JOIN over en VALUES klausul
  • (kun hurtigere for meget store lister med værdier):COPY værdiliste til en midlertidig tabel, indekser den og JOIN 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:



  1. Sådan løses org.postgresql.jdbc.PgConnection.createClob() er endnu ikke implementeret

  2. MayBeSQL kommer til Microsoft Access!

  3. MySQL 'Opdater tidsstempel'-kolonne - Trigger

  4. Tildel valgprivilegium til rækker med betingelse