I database eseguono un'eliminazione e un inserimento quando devono aggiornare le righe?


13

Quindi oggi un professore ci ha detto che quando il database deve effettuare un aggiornamento, internamente (a basso livello) effettua una cancellazione e quindi un inserimento con i campi aggiornati. Ha poi detto che questo è qualcosa fatto in tutti i database e poi ho iniziato una discussione dicendo che pensavo che non avesse senso, ma non avevo abbastanza risorse per supportare la mia posizione. Sembra che sappia molto, ma non riesco a capire perché dbs lo faccia.

Voglio dire, so che se aggiorni un campo e hai bisogno di più spazio per quella riga, allora potrebbe cancellare fisicamente la riga e metterla alla fine con i nuovi dati. Ma se ad esempio riduci lo spazio utilizzato, perché dovrebbe eliminarlo e reinserirlo alla fine?

È vero? Quali sono i vantaggi?


1
Stava parlando di un tipo specifico di database?
Tom V - prova topanswers.xyz

1
@TomV stava parlando di sql server ma poi ha detto che è stato fatto così in tutti i dbs ..
Pablo Matias Gomez

Risposte:


16

È vero?

No, è un dettaglio di implementazione. Un database può implementare un aggiornamento adeguato in atto se lo desidera.

Quali sono i vantaggi?

La suddivisione di un aggiornamento in una cancellazione seguita da un inserimento generalmente rende l'implementazione più semplice. I potenziali vantaggi collaterali includono la possibilità di evitare violazioni chiave transitorie in un indice univoco, ordinando opportunamente le operazioni di eliminazione / inserimento divise.

Un aggiornamento diviso potrebbe essere un po 'più lento e generare più log di un vero aggiornamento sul posto (che non è sempre possibile comunque).

Come ha notato Kin in un commento, se hai bisogno di un esempio (per SQL Server) vedi:

È anche correlato all'implementazione di MVCC. Nella pagina Wikipedia su MVCC , è menzionato:

Quando un database MVCC deve aggiornare un elemento di dati, non sovrascriverà i vecchi dati con nuovi dati , ma invece contrassegnerà i vecchi dati come obsoleti e aggiungerà la versione più recente altrove. Quindi ci sono più versioni memorizzate, ma solo una è l'ultima. Ciò consente ai lettori di accedere ai dati che erano lì quando hanno iniziato a leggere, anche se sono stati modificati o eliminati parzialmente da qualcun altro.

Vedi anche la pagina 60 di PostgreSQL Internals pdf di Bruce Momjian (Postgres usa MVCC): " UPDATEè effettivamente un DELETEe un INSERT".

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.