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?
źródło
Odpowiedzi:
Nie, jest to szczegół implementacji. Baza danych może realizować odpowiednią aktualizację na miejscu , jeśli tak zdecyduje.
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:
Zobacz także str. 60 pliku wewnętrznego PostgreSQL pdf autorstwa Bruce'a Momjiana (Postgres używa MVCC): „
UPDATE
jest skutecznie„DELETE
i jestINSERT
”.źródło