Apakah basis data membuat penghapusan dan penyisipan ketika harus memperbarui baris?


13

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?


1
Apakah dia berbicara tentang tipe database tertentu?
Tom V - coba topanswers.xyz

1
@ TomV dia berbicara tentang server sql tetapi dia kemudian mengatakan bahwa itu dilakukan seperti ini di semua dbs ..
Pablo Matias Gomez

Jawaban:


16

Apakah ini benar?

Tidak, ini adalah detail implementasi. Sebuah database dapat menerapkan pembaruan yang sesuai di tempat jika begitu memilih.

Apa manfaatnya?

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:

Ketika database MVCC perlu memperbarui item data, itu tidak akan menimpa data lama dengan data baru , melainkan menandai data lama sebagai usang dan menambahkan versi yang lebih baru di tempat lain. Jadi ada beberapa versi yang disimpan, tetapi hanya satu yang terbaru. Ini memungkinkan pembaca untuk mengakses data yang ada di sana ketika mereka mulai membaca, bahkan jika itu dimodifikasi atau dihapus sebagian jalan oleh orang lain.

Lihat juga halaman 60 PostgreSQL Internals pdf oleh Bruce Momjian (Postgres menggunakan MVCC): " UPDATEsecara efektif a DELETEdan INSERT."

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.