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?
fuente
Respuestas:
No, es un detalle de implementación. Una base de datos puede implementar una actualización adecuada en su lugar si así lo decide.
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:
Consulte también la página 60 de PostgreSQL Internals pdf por Bruce Momjian (Postgres usa MVCC): "
UPDATE
es efectivamente unaDELETE
y unaINSERT
".fuente