В PostgreSql, который является более эффективным массовое обновление или удаление? - PullRequest
2 голосов
/ 07 ноября 2019

В моем веб-приложении на Java мне нужно удалить набор записей из таблицы. У меня есть 2 варианта:

  1. Непосредственный запуск запроса на удаление из приложения
  2. Обновление значения во всех записях, чтобы скрыть их от представления пользователя и позволить запускать и очищать поток демонаэти записи в фоновом режиме.

Количество записей может варьироваться от 10 до 100000. Мое намерение здесь состоит в том, чтобы узнать эффективный и безопасный способ сделать это без чрезмерной нагрузки на сервер.

PS: не стесняйтесь поделиться любым другим подходящим подходом.

Ответы [ 3 ]

3 голосов
/ 07 ноября 2019

Под капотом UPDATE на самом деле:

  1. Пометить обновленную строку как удаленную
  2. Вставить новую строку, которая является копией строки в 1. выше,но с учетом обновленных столбцов

Следовательно, поскольку операция UPDATE включает в себя две записи, DELETE на самом деле более эффективна, поскольку она просто помечает удаленную строку, используя одну запись (из-за MultiСреды управления параллельной версией (MVCC)

Раскрытие информации: я работаю для EnterpriseDB (EDB)

2 голосов
/ 08 ноября 2019

Команда обновления занимает намного больше времени по сравнению с командой удаления. В обновлении вы фактически делаете копию данных, а старая версия данных просто скрыта от просмотра.

1 голос
/ 07 ноября 2019

Если вам понадобятся эти записи в будущем, вы можете переместить эти записи в другую таблицу.

Преимущество этого подхода: -

  1. Вы не перегружаете свой текущийТаблица, следовательно, все операции для этой таблицы будут быстрыми.
  2. Вы можете использовать эти записи в будущем.

Обновить

Asвам не нужны записи, и поскольку обновление дороже, чем удаление, вы должны вызвать вызов на удаление, скажем, от 500 до 5000 записей.

...