PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Проблем с производителността в заявката за актуализиране

В груб ред от по-бавно към по-бързо:

  • 200 отделни заявки, всяка в отделна транзакция
  • 200 отделни заявки, всички в една транзакция
  • 1 голяма заявка с WHERE ... IN (...) или WHERE EXISTS (SELECT ...)
  • 1 голяма заявка с INNER JOIN над VALUES клауза
  • (само по-бързо за много големи списъци със стойности):COPY списък със стойности към временна таблица, индексирайте я и JOIN на временната таблица.

Ако използвате стотици стойности, наистина предлагам да се присъедините към VALUES клауза. За много хиляди стойности, COPY към временна таблица и я индексирайте, след което се присъединете към нея.

Пример за присъединяване към клауза за стойности. Предвид това IN заявка:

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

еквивалентът на VALUES е:

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

Обърнете внимание обаче, че използването на VALUES този начин е разширение на PostgreSQL, докато IN , или използването на временна таблица, е SQL стандарт.

Вижте този свързан въпрос:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да разделим име на фамилия плюс инициали

  2. Функцията min(uuid) не съществува в postgresql

  3. Как да използвате подготвени оператори с Postgres

  4. Удостоверяването на паролата е неуспешно със сложна парола

  5. Импортирайте дъмпа на MySQL в базата данни PostgreSQL