Czy bazy danych wykonują usuwanie i wstawianie podczas aktualizacji wierszy?

13

Więc dzisiaj profesor powiedział nam, że kiedy baza danych musi dokonać aktualizacji, wewnętrznie (na niskim poziomie) dokonuje usunięcia, a następnie wstawienia ze zaktualizowanymi polami. Następnie powiedział, że jest to coś zrobionego we wszystkich bazach danych, a następnie rozpocząłem dyskusję, mówiąc, że myślałem, że to nie ma sensu, ale nie miałem wystarczających zasobów, aby poprzeć moje stanowisko. Wydaje się, że dużo wie, ale nie rozumiem, dlaczego dbs miałoby to robić.

Wiem, że jeśli zaktualizujesz pole i potrzebujesz więcej miejsca dla tego wiersza, może on fizycznie usunąć wiersz i umieścić go na końcu z nowymi danymi. Ale jeśli na przykład zmniejszysz używane miejsce, dlaczego miałoby to zostać usunięte i wstawione ponownie na końcu?

Czy to w ogóle prawda? Jakie są korzyści?

Pablo Matias Gomez
źródło
1
Czy mówił o konkretnym typie bazy danych?
Tom V - spróbuj topanswers.xyz
1
@TomV mówił o serwerze sql, ale potem powiedział, że zrobiono to tak we wszystkich dbs ..
Pablo Matias Gomez

Odpowiedzi:

16

Czy to w ogóle prawda?

Nie, jest to szczegół implementacji. Baza danych może realizować odpowiednią aktualizację na miejscu , jeśli tak zdecyduje.

Jakie są korzyści?

Dzielenie aktualizacji na usunięcie, po której następuje wstawka, ogólnie upraszcza implementację. Potencjalne korzyści uboczne obejmują możliwość uniknięcia przejściowego naruszenia klucza w unikalnym indeksie poprzez odpowiednie sortowanie podzielonych operacji usuwania / wstawiania.

Aktualizacja podzielona może być nieco wolniejsza i generować więcej dzienników niż prawdziwa aktualizacja lokalna (co i tak nie zawsze jest możliwe).

Jak zauważył Kin w komentarzu, jeśli potrzebujesz przykładu (dla SQL Server) zobacz:

Ma to również związek z wdrażaniem MVCC. Na stronie Wikipedii o MVCC wspomniano:

Kiedy baza danych MVCC musi zaktualizować element danych, nie zastąpi starych danych nowymi danymi , ale zamiast tego oznaczy stare dane jako przestarzałe i doda nową wersję w innym miejscu. W ten sposób przechowywanych jest wiele wersji, ale tylko jedna jest najnowsza. Umożliwia to czytelnikom dostęp do danych, które były tam, kiedy zaczęli czytać, nawet jeśli zostały one zmodyfikowane lub usunięte częściowo przez kogoś innego.

Zobacz także str. 60 pliku wewnętrznego PostgreSQL pdf autorstwa Bruce'a Momjiana (Postgres używa MVCC): UPDATEjest skutecznie„ DELETEi jest INSERT”.

Paul White 9
źródło