Führen Datenbanken ein Löschen und Einfügen durch, wenn Zeilen aktualisiert werden müssen?

13

Ein Professor hat uns heute gesagt, dass die Datenbank, wenn sie intern (auf niedriger Ebene) aktualisiert werden muss, ein Löschen und dann ein Einfügen mit den aktualisierten Feldern vornimmt. Er sagte dann, dass dies in allen Datenbanken gemacht wurde und dann begann ich eine Diskussion, in der er sagte, dass ich dachte, dass es keinen Sinn habe, aber ich hatte nicht genug Ressourcen, um meine Position zu unterstützen. Er scheint viel zu wissen, aber ich kann nicht verstehen, warum dbs das tun würde.

Ich weiß, wenn Sie ein Feld aktualisieren und mehr Platz für diese Zeile benötigen, wird die Zeile möglicherweise physisch gelöscht und am Ende mit den neuen Daten versehen. Wenn Sie zum Beispiel den verwendeten Speicherplatz reduzieren, warum sollte er dann gelöscht und am Ende wieder eingefügt werden?

Ist das überhaupt wahr? Was sind die Vorteile?

Pablo Matias Gomez
quelle
1
Hat er über einen bestimmten Datenbanktyp gesprochen?
Tom V - Team Monica
1
@ TomV er sprach über SQL Server, aber er sagte dann, dass es in allen DBS so gemacht wurde ..
Pablo Matias Gomez

Antworten:

16

Ist das überhaupt wahr?

Nein, es ist ein Implementierungsdetail. Eine Datenbank kann ein geeignetes Update implementieren statt , wenn es sich dafür entscheidet.

Was sind die Vorteile?

Das Aufteilen eines Updates in ein Löschen, gefolgt von einem Einfügen, vereinfacht im Allgemeinen die Implementierung. Zu den möglichen Nebeneffekten gehört die Möglichkeit, vorübergehende Schlüsselverletzungen in einem eindeutigen Index zu vermeiden , indem die geteilten Lösch- / Einfügevorgänge in geeigneter Weise sortiert werden.

Eine geteilte Aktualisierung ist möglicherweise etwas langsamer und generiert mehr Protokolle als eine echte direkte Aktualisierung (was ohnehin nicht immer möglich ist).

Wie Kin in einem Kommentar angemerkt hat, wenn Sie ein Beispiel benötigen (für SQL Server), siehe:

Es bezieht sich auch auf die Implementierung von MVCC. Auf der Wikipedia-Seite über MVCC wird Folgendes erwähnt:

Wenn eine MVCC-Datenbank ein Datenelement aktualisieren muss, werden die alten Daten nicht durch neue Daten überschrieben , sondern die alten Daten werden als veraltet markiert und die neuere Version wird an einer anderen Stelle hinzugefügt. Somit sind mehrere Versionen gespeichert, aber nur eine ist die neueste. Auf diese Weise können Leser auf die Daten zugreifen, die sich zu Beginn des Lesevorgangs befanden, auch wenn sie während des Lesevorgangs von einer anderen Person geändert oder gelöscht wurden.

Siehe auch Seite 60 des PostgreSQL Internals pdf von Bruce Momjian (Postgres verwendet MVCC): " is actually a and an ."UPDATEDELETEINSERT

Paul White Monica wieder einsetzen
quelle