sql >> Database >  >> RDS >> PostgreSQL

Prestatieprobleem in updatequery

In grove volgorde van langzamer naar sneller:

  • 200 individuele zoekopdrachten, elk in hun eigen transactie
  • 200 individuele zoekopdrachten, allemaal in één transactie
  • 1 grote vraag met WHERE ... IN (...) of WHERE EXISTS (SELECT ...)
  • 1 grote vraag met een INNER JOIN over een VALUES clausule
  • (alleen sneller voor zeer grote zoeklijsten):COPY waardelijst naar een tijdelijke tabel, indexeer deze en JOIN op de tijdelijke tafel.

Als je honderden waarden gebruikt, raad ik je echt aan mee te doen via een VALUES clausule. Voor vele duizenden waarden, COPY naar een tijdelijke tabel en indexeer deze en doe er vervolgens mee.

Een voorbeeld van deelname aan een waardenclausule. Gezien deze IN vraag:

SELECT *
FROM mytable
WHERE somevalue IN (1, 2, 3, 4, 5);

het equivalent met VALUES is:

SELECT *
FROM mytable
INNER JOIN (
  VALUES (1), (2), (3), (4), (5)
) vals(v)
ON (somevalue = v);

Houd er echter rekening mee dat het gebruik van VALUES deze manier is een PostgreSQL-extensie, waar IN , of het gebruik van een tijdelijke tabel, is standaard SQL.

Zie deze gerelateerde vraag:



  1. Versneld databaseherstel in SQL Server 2019

  2. dynamische sql-fout:'CREATE TRIGGER' moet de eerste instructie in een querybatch zijn

  3. Heeft de Azure PHP 7-webapp Oracle-stuurprogramma's?

  4. Hoe een door de gebruiker gedefinieerde recordgegevenstypevariabele in Oracle Database te maken?