ฐานข้อมูลทำการลบและแทรกเมื่อมีการอัพเดทแถวหรือไม่?


13

ดังนั้นวันนี้อาจารย์คนหนึ่งบอกเราว่าเมื่อฐานข้อมูลต้องทำการอัพเดทภายใน (ในระดับต่ำ) มันจะทำการลบแล้วแทรกด้วยเขตข้อมูลที่อัปเดต จากนั้นเขาก็บอกว่านี่เป็นสิ่งที่ทำในฐานข้อมูลทั้งหมดแล้วฉันก็เริ่มการสนทนาโดยบอกว่าฉันคิดว่ามันไม่มีเหตุผล แต่ฉันไม่มีทรัพยากรเพียงพอที่จะสนับสนุนตำแหน่งของฉัน ดูเหมือนว่าเขาจะรู้มาก แต่ฉันก็ไม่เข้าใจว่าทำไมทำไมถึงทำอย่างนั้น

ฉันหมายความว่าฉันรู้ว่าถ้าคุณอัปเดตเขตข้อมูลและคุณต้องการพื้นที่เพิ่มสำหรับแถวนั้นก็อาจลบแถวทางกายภาพและวางไว้ที่ส่วนท้ายด้วยข้อมูลใหม่ แต่ถ้าเช่นคุณลดพื้นที่ที่ใช้ทำไมมันจะลบและใส่มันอีกครั้งในตอนท้าย?

มันเป็นเรื่องจริงเหรอ? ประโยชน์คืออะไร


1
เขากำลังพูดถึงประเภทของฐานข้อมูลเฉพาะหรือไม่
Tom V - ลอง topanswers.xyz

1
@TomV เขากำลังพูดเกี่ยวกับเซิร์ฟเวอร์ SQL แต่แล้วเขาก็บอกว่ามันทำเช่นนี้ในดีบีเอสทั้งหมด ..
ปาโบลโกเมซ Matias

คำตอบ:


16

มันเป็นเรื่องจริงเหรอ?

ไม่มันเป็นรายละเอียดการใช้งาน ฐานข้อมูลอาจดำเนินการปรับปรุงที่เหมาะสมในสถานที่ถ้าต้องการ

ประโยชน์คืออะไร

การแยกการอัปเดตเป็นการลบตามด้วยการแทรกโดยทั่วไปทำให้การใช้งานง่ายขึ้น ประโยชน์ด้านที่อาจเกิดขึ้นรวมถึงความสามารถในการหลีกเลี่ยงการละเมิดคีย์ชั่วคราวในดัชนีที่ไม่ซ้ำกันโดยการเรียงลำดับการดำเนินการลบ / แทรกแบบแยกส่วนอย่างเหมาะสม

การอัปเดตแบบแยกอาจช้าลงเล็กน้อยและสร้างบันทึกมากกว่าการอัปเดตแบบแทนที่ (ซึ่งไม่สามารถทำได้ตลอดเวลา)

ตามที่ Kin บันทึกไว้ในความคิดเห็นหากคุณต้องการตัวอย่าง (สำหรับ SQL Server) ดู:

นอกจากนี้ยังเกี่ยวข้องกับการใช้ MVCC ในหน้า Wikipedia เกี่ยวกับMVCCมีการกล่าวถึง:

เมื่อฐานข้อมูล MVCC ต้องการอัปเดตรายการข้อมูลจะไม่เขียนทับข้อมูลเก่าด้วยข้อมูลใหม่แต่ทำเครื่องหมายข้อมูลเก่าว่าล้าสมัยแล้วเพิ่มรุ่นใหม่ที่อื่นแทน ดังนั้นจึงมีหลายรุ่นที่เก็บไว้ แต่มีเพียงรุ่นเดียวเท่านั้นที่เป็นรุ่นล่าสุด วิธีนี้ช่วยให้ผู้อ่านเข้าถึงข้อมูลที่มีเมื่อพวกเขาเริ่มอ่านแม้ว่าจะมีการแก้ไขหรือลบส่วนของคนอื่นก็ตาม

ดูหน้า 60 ของPostgreSQL Internals pdfโดย Bruce Momjian (Postgres ใช้ MVCC): " UPDATEมีประสิทธิภาพDELETEและมีINSERTประสิทธิภาพ"

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.