Jadi hari ini seorang profesor memberi tahu kami bahwa ketika database harus membuat pembaruan, secara internal (pada level rendah) itu membuat penghapusan dan kemudian menyisipkan dengan bidang yang diperbarui. Dia kemudian mengatakan bahwa ini adalah sesuatu yang dibuat di semua database dan kemudian saya memulai sebuah diskusi yang mengatakan bahwa saya pikir itu tidak masuk akal tetapi saya tidak memiliki sumber daya yang cukup untuk mendukung posisi saya. Dia tampaknya tahu banyak tetapi saya tidak bisa mengerti mengapa dbs melakukan itu.
Maksud saya, saya tahu bahwa jika Anda memperbarui bidang dan Anda membutuhkan lebih banyak ruang untuk baris itu, maka baris itu dapat dihapus secara fisik dan meletakkannya di bagian akhir dengan data baru. Tetapi jika misalnya Anda mengurangi ruang yang digunakan, mengapa itu menghapus dan memasukkannya kembali di akhir?
Apakah ini benar? Apa manfaatnya?
sumber
Jawaban:
Tidak, ini adalah detail implementasi. Sebuah database dapat menerapkan pembaruan yang sesuai di tempat jika begitu memilih.
Memisahkan pembaruan menjadi penghapusan diikuti oleh sisipan umumnya membuat implementasi lebih mudah. Manfaat samping potensial mencakup kemampuan untuk menghindari pelanggaran kunci sementara dalam indeks unik, dengan menyortir operasi penghapus / penyisipan split yang sesuai.
Pembaruan perpecahan mungkin sedikit lebih lambat dan menghasilkan lebih banyak log daripada pembaruan di tempat yang sebenarnya (yang tidak selalu memungkinkan).
Seperti yang dicatat Kin dalam komentar, jika Anda memerlukan contoh (untuk SQL Server) lihat:
Ini juga terkait dengan penerapan MVCC. Di halaman Wikipedia tentang MVCC , disebutkan:
Lihat juga halaman 60 PostgreSQL Internals pdf oleh Bruce Momjian (Postgres menggunakan MVCC): "
UPDATE
secara efektif aDELETE
danINSERT
."sumber