Nó thực sự phụ thuộc vào bao nhiêu dữ liệu đang thay đổi. Hãy nói rằng bảng này có 20 cột. Và bạn cũng có 5 chỉ mục - mỗi chỉ số khác nhau. cột.
Bây giờ nếu các giá trị trong tất cả 20 cột đang thay đổi HOẶC ngay cả khi dữ liệu trong 5 cột thay đổi và 5 cột này đều được lập chỉ mục, thì bạn có thể nên "xóa và chèn" tốt hơn. Nhưng nếu chỉ có 2 cột thay đổi và giả sử đây không phải là một phần của bất kỳ chỉ mục không được phân cụm nào, thì bạn có thể nên "Cập nhật" các bản ghi vì trong trường hợp này chỉ có chỉ mục được nhóm sẽ được cập nhật (và các chỉ mục sẽ không phải đã được cập nhật).
Trong nghiên cứu sâu hơn, tôi thấy rằng nhận xét trên của tôi là không cần thiết vì SQL Server bên trong có 2 cơ chế riêng biệt để thực hiện CẬP NHẬT. - "Cập nhật tại chỗ" (nghĩa là bằng cách thay đổi giá trị cột thành mới trong hàng ban đầu) hoặc dưới dạng "CẬP NHẬT không tại chỗ" (XÓA theo sau là CHERTN).
Cập nhật tại chỗ là quy tắc và được thực hiện nếu có thể. Ở đây các hàng giữ chính xác tại cùng một vị trí trên cùng một trang trong cùng một phạm vi. Chỉ các byte bị ảnh hưởng được chnaged. Tlog chỉ có một bản ghi (miễn là không có kích hoạt cập nhật). Cập nhật xảy ra tại chỗ nếu một đống đang được cập nhật (và có đủ không gian trên trang). Các cập nhật cũng xảy ra nếu phím phân cụm thay đổi nhưng hàng không cần phải di chuyển.
Ví dụ: nếu bạn có một chỉ mục được nhóm trên tên cuối cùng và bạn có các tên: Able, Baker, Charlie Bây giờ bạn muốn cập nhật Baker thành Becker. Không có hàng phải được di chuyển. Vì vậy, điều này có thể diễn ra. Trong khi đó, nếu bạn phải cập nhật Able to Kumar, các hàng sẽ phải được thay đổi (mặc dù chúng sẽ nằm trên cùng một trang). Trong trường hợp này, SQL Server sẽ thực hiện XÓA sau đó là một CHERTN.
Xem xét ở trên, tôi sẽ đề nghị bạn thực hiện CẬP NHẬT bình thường và để SQL Server tìm ra cách tốt nhất để làm điều đó trong nội bộ.
Để biết thêm chi tiết về nội bộ "CẬP NHẬT" hoặc về vấn đề đó đối với bất kỳ nội bộ liên quan đến Máy chủ SQL nào, hãy xem cuốn sách của Kalen Delaney, Paul Randal, et al. - SQL Server 2008 Internals .