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?
quelle
Antworten:
Nein, es ist ein Implementierungsdetail. Eine Datenbank kann ein geeignetes Update implementieren statt , wenn es sich dafür entscheidet.
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:
Siehe auch Seite 60 des PostgreSQL Internals pdf von Bruce Momjian (Postgres verwendet MVCC): " is actually a and an ."
UPDATE
DELETE
INSERT
quelle