В чем преимущество обновления вместо удаления, а затем вставки в ту же таблицу - PullRequest
2 голосов
/ 09 января 2009

У меня есть таблица, скажем, пример "ABC", у меня есть строка, которую нужно сохранить в этой таблице "ABC". Я планирую обновить его вместо удаления из таблицы, а затем вставить. Как это повлияет на базу данных? В, уровень таблицы, уровень страницы, время, стоимость и все.

Ответы [ 7 ]

11 голосов
/ 09 января 2009

Я не уверен на 100%, что вы спрашиваете, но я сделаю снимок в темноте. Выполнение DELETE, а затем вставки в таблицу для обновления информации - очень плохая идея.

Почему? Потому что, если у вас есть другая таблица с внешним ключом, ссылающимся на ABC, вы потеряете свою ссылку. Это, конечно, если вы не установите PK новой записи с тем же PK, что и у старой (удаленной) записи. В таком случае, почему вы просто не ОБНОВЛЯЛИ в первую очередь?

Кроме того, DELETING и затем INSERTing - это две операции, тогда как UPDATEing - это одна, заставляя DELETE и INSERT занимать (теоретически) больше времени.

Существует также фактор простоты использования. Если вы УДАЛИТЕ, а затем УСТАНОВИТЕ, вам придется вручную отслеживать каждое значение столбца. Если вы ОБНОВЛЯЕТЕ, вам просто нужно знать, что вы хотите изменить.

2 голосов
/ 19 января 2009

Операции DELETE & INSERT занимают больше времени по сравнению с UPDATE. Подумайте, хотите ли вы изменить только один столбец в строке. Затем DELETE и INSERT будут сложными.

2 голосов
/ 09 января 2009

Обновление - это простой и быстрый способ обновления таблицы.

1 голос
/ 20 июня 2011

ОБНОВЛЕНИЕ предпочтительно, но в зависимости от СУБД DELETE-INSERT используется для того, чтобы избежать LOCK, чтобы он мог обслуживать большой объем одновременных обращений. Это обычная техника.

Некоторые БД используют записи фиксированного размера на диске, поэтому ОБНОВЛЕНИЕ выполняется быстро. Это операция на месте. Некоторые другие БД используют запись переменного размера. В таких БД DELETE / INSERT не сильно отличается от UPDATE, потому что UPDATE фактически отмечает старый кортеж / индекс как мертвый, записывает новый кортеж, а затем позволяет сборщику мусора восстанавливать мертвые кортежи позже.

0 голосов
/ 09 января 2009

Также одним из преимуществ UPDATE является фактическое определение базы данных ACID - атомарность.

0 голосов
/ 09 января 2009

Ключевое преимущество использования UPDATE вместо DELETE / INSERT заключается в том, что вы можете выбрать только обновление измененных полей в строке (что значительно быстрее, чем DELETE, после которого следует INSERT).

0 голосов
/ 09 января 2009

Обновление изменит существующую строку, что является простой операцией, в то время как удаление, сопровождаемое вставкой, будет больше работать для базы данных.

Кроме того, удаление и вставка могут уничтожить ссылки на ваши строки, если вы используете столбцы идентификаторов.

Edit: На самом деле бывают случаи, когда вы хотите удалить и вставить вместо обновления. Это может упростить вашу логику, если вы не знаете, существуют ли данные для обновления. Тогда было бы проще выполнить удаление, а затем выполнить вставку, чем проверить, существует ли строка, а затем выполнить обновление или вставку на основе результата проверки.

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

Но в целом выполнение обновления - это меньше работы, чем операция удаления и вставки, поэтому вы всегда должны использовать ее, если можете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...