PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Problem z wydajnością w zapytaniu o aktualizację

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 (...) lub WHERE EXISTS (SELECT ...)
  • 1 duże zapytanie z INNER JOIN ponad VALUES klauzula
  • (szybciej tylko w przypadku bardzo dużych list wartości):COPY lista wartości do tabeli tymczasowej, zindeksuj ją i JOIN 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:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Rails 3, Heroku:Taps Server Error:PGError:ERROR:nieprawidłowa sekwencja bajtów do kodowania UTF8:0xba

  2. Przenieś dane SPATIAL z Oracle do Postgresql

  3. Zablokuj SELECT, aż wyniki będą dostępne

  4. Dlaczego migracja Sequelize tworzy tabelę, ale modele nie mogą połączyć się z bazą danych

  5. Jak uzyskać obiekt json jako kolumnę w postgresql?