¿Las bases de datos hacen una eliminación y una inserción cuando tienen que actualizar filas?

13

Así que hoy un profesor nos dijo que cuando la base de datos tiene que hacer una actualización, internamente (a bajo nivel) hace una eliminación y luego una inserción con los campos actualizados. Luego dijo que esto es algo hecho en todas las bases de datos y luego comencé una discusión diciendo que pensaba que no tenía sentido, pero que no tenía suficientes recursos para apoyar mi posición. Parece saber mucho pero no puedo entender por qué dbs haría eso.

Quiero decir, sé que si actualizas un campo y necesitas más espacio para esa fila, entonces puede eliminar la fila físicamente y ponerla al final con los nuevos datos. Pero si, por ejemplo, reduce el espacio utilizado, ¿por qué lo eliminaría y volvería a insertar al final?

¿Es esto incluso cierto? ¿Cuales son los beneficios?

Pablo Matias Gomez
fuente
1
¿Estaba hablando de un tipo específico de base de datos?
Tom V - prueba topanswers.xyz
1
@TomV estaba hablando sobre el servidor sql pero luego dijo que se hizo así en todos los dbs ..
Pablo Matias Gomez

Respuestas:

16

¿Es esto incluso cierto?

No, es un detalle de implementación. Una base de datos puede implementar una actualización adecuada en su lugar si así lo decide.

¿Cuales son los beneficios?

Dividir una actualización en una eliminación seguida de una inserción generalmente simplifica la implementación. Los posibles beneficios secundarios incluyen la capacidad de evitar violaciones transitorias de claves en un índice único, clasificando adecuadamente las operaciones de eliminación / inserción divididas.

Una actualización dividida puede ser un poco más lenta y generar más registros que una actualización real (que no siempre es posible de todos modos).

Como Kin señaló en un comentario, si necesita un ejemplo (para SQL Server) vea:

También está relacionado con la implementación de MVCC. En la página de Wikipedia sobre MVCC , se menciona:

Cuando una base de datos MVCC necesita actualizar un elemento de datos, no sobrescribirá los datos antiguos con datos nuevos , sino que marcará los datos antiguos como obsoletos y agregará la versión más nueva en otro lugar. Por lo tanto, hay varias versiones almacenadas, pero solo una es la última. Esto permite a los lectores acceder a los datos que estaban allí cuando comenzaron a leer, incluso si alguien más los modificó o eliminó.

Consulte también la página 60 de PostgreSQL Internals pdf por Bruce Momjian (Postgres usa MVCC): " UPDATEes efectivamente una DELETEy una INSERT".

Paul White 9
fuente