Чи роблять бази даних видалення та вставки, коли потрібно оновлювати рядки?


13

Тож сьогодні професор сказав нам, що коли база даних повинна робити оновлення, внутрішньо (на низькому рівні) вона робить видалення, а потім вставку з оновленими полями. Потім він сказав, що це щось зроблено у всіх базах даних, і тоді я розпочав дискусію, сказавши, що вважаю, що це не має сенсу, але у мене не вистачає ресурсів, щоб підтримати свою позицію. Він, здається, знає багато, але я не можу зрозуміти, чому б це робив dbs.

Я маю на увазі, я знаю, що якщо ви оновите поле і вам потрібно більше місця для цього рядка, він може фізично видалити рядок і поставити його в кінці з новими даними. Але якщо ви, наприклад, зменшите використаний простір, чому б його видалити та повторно вставити його в кінці?

Це навіть правда? Які переваги?


1
Він говорив про конкретний тип бази даних?
Том V - спробуйте topanswers.xyz

1
@TomV він говорив про сервер sql, але потім сказав, що це робилося так у всіх dbs ..
Пабло Матіас Гомес

Відповіді:


16

Це навіть правда?

Ні, це деталь реалізації. База даних може впровадити відповідне оновлення на місці, якщо вона захоче.

Які переваги?

Розщеплення оновлення на видалення з подальшим вставкою, як правило, спрощує реалізацію. До потенційних побічних переваг можна віднести можливість уникнути перехідних порушень ключа в унікальному індексі шляхом відповідного сортування розділених операцій видалення / вставки.

Розділене оновлення може бути трохи повільніше і генерувати більше журналу, ніж справжнє оновлення на місці (що все одно не завжди можливо).

Як зазначив Кін у коментарі, якщо вам потрібен приклад (для SQL Server), див:

Це також пов'язане з впровадженням MVCC. На сторінці Вікіпедії про MVCC згадується:

Коли база даних MVCC потребує оновлення елемента даних, вона не перезаписує старі дані новими даними , а натомість позначить старі дані як застарілі та додасть нову версію в іншому місці. Таким чином, є кілька версій, які зберігаються, але лише одна - найновіша. Це дозволяє читачам отримувати доступ до даних, які були там, коли вони почали читати, навіть якщо їх хтось інший модифікував або видаляв частину шляху.

Див. Також стор. 60 PostgreSQL Internals pdf Брюса Момдзяна (Postgres використовує MVCC): " UPDATEефективно" DELETEі " INSERT.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.