Các cơ sở dữ liệu có xóa và chèn khi phải cập nhật hàng không?


13

Vì vậy, hôm nay một giáo sư nói với chúng tôi rằng khi cơ sở dữ liệu phải thực hiện cập nhật, bên trong (ở mức độ thấp), nó sẽ xóa và sau đó chèn với các trường được cập nhật. Sau đó, ông nói rằng đây là thứ được tạo ra trên tất cả các cơ sở dữ liệu và sau đó tôi bắt đầu một cuộc thảo luận nói rằng tôi nghĩ rằng nó không có ý nghĩa gì nhưng tôi không có đủ nguồn lực để hỗ trợ vị trí của mình. Anh ta dường như biết rất nhiều nhưng tôi không thể hiểu tại sao dbs lại làm vậy.

Ý tôi là, tôi biết rằng nếu bạn cập nhật một trường và bạn cần thêm không gian cho hàng đó, thì nó có thể xóa hàng đó một cách vật lý và đặt nó ở cuối cùng với dữ liệu mới. Nhưng nếu ví dụ bạn giảm dung lượng sử dụng, tại sao nó lại xóa và chèn lại vào cuối?

Điều này thậm chí có đúng không? Những lợi ích là gì?


1
Có phải anh ấy đang nói về một loại cơ sở dữ liệu cụ thể?
Tom V - thử topanswers.xyz

1
@TomV anh ấy đã nói về máy chủ sql nhưng sau đó anh ấy nói rằng nó đã được thực hiện như thế này trong tất cả các dbs ..
Pablo Matias Gomez

Câu trả lời:


16

Điều này thậm chí có đúng không?

Không, nó là một chi tiết thực hiện. Một cơ sở dữ liệu có thể thực hiện một bản cập nhật phù hợp tại chỗ nếu nó chọn.

Những lợi ích là gì?

Việc tách một bản cập nhật thành một bản xóa theo sau là một phần chèn thường làm cho việc thực hiện đơn giản hơn. Các lợi ích phụ tiềm năng bao gồm khả năng tránh vi phạm khóa tạm thời trong một chỉ mục duy nhất, bằng cách sắp xếp phù hợp các hoạt động xóa / chèn tách.

Một bản cập nhật phân tách thể chậm hơn một chút và tạo ra nhiều nhật ký hơn một bản cập nhật tại chỗ thực sự (dù sao không phải lúc nào cũng có thể).

Như Kin đã lưu ý trong một nhận xét, nếu bạn cần một ví dụ (đối với SQL Server), hãy xem:

Nó cũng liên quan đến việc thực hiện MVCC. Trong trang Wikipedia về MVCC , nó được đề cập:

Khi cơ sở dữ liệu MVCC cần cập nhật một mục dữ liệu, nó sẽ không ghi đè dữ liệu cũ bằng dữ liệu mới , mà thay vào đó đánh dấu dữ liệu cũ là lỗi thời và thêm phiên bản mới hơn ở nơi khác. Do đó, có nhiều phiên bản được lưu trữ, nhưng chỉ có một phiên bản mới nhất. Điều này cho phép người đọc truy cập dữ liệu ở đó khi họ bắt đầu đọc, ngay cả khi nó bị sửa đổi hoặc xóa một phần bởi người khác.

Xem thêm trang 60 của PostgreSQL Internals pdf của Bruce Momjian (Postgres sử dụng MVCC): "thực sự UPDATElà một DELETEvà một INSERT."

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.