XÓA -> công cụ cơ sở dữ liệu tìm và xóa hàng khỏi các trang dữ liệu có liên quan và tất cả các trang chỉ mục nơi hàng được nhập. Vì vậy, càng nhiều chỉ mục thì càng mất nhiều thời gian.
Vâng, mặc dù có hai lựa chọn ở đây. Các hàng có thể bị xóa khỏi các chỉ mục không được sắp xếp theo từng hàng bởi cùng một toán tử thực hiện xóa bảng cơ sở. Đây được gọi là gói cập nhật hẹp (hoặc mỗi hàng):
Hoặc, việc xóa chỉ mục không được bao gồm có thể được thực hiện bởi các toán tử riêng biệt, mỗi lần một chỉ mục không bao gồm. Trong trường hợp này (được gọi là kế hoạch cập nhật rộng hoặc theo chỉ mục), toàn bộ hành động được lưu trữ trong một bàn làm việc (bộ đệm háo hức) trước khi được phát lại một lần cho mỗi chỉ mục, thường được sắp xếp rõ ràng bởi các khóa của chỉ mục không được bao gồm cụ thể để khuyến khích tuần tự mô hình truy cập.
TRUNCATE -> chỉ cần xóa tất cả các trang dữ liệu của bảng, vì đây là một tùy chọn hiệu quả hơn để xóa nội dung của bảng.
Vâng. TRUNCATE TABLE
hiệu quả hơn vì một số lý do:
- Ít khóa hơn có thể cần thiết. Cắt ngắn thường chỉ yêu cầu một khóa sửa đổi lược đồ duy nhất ở cấp độ bảng (và các khóa độc quyền trên mỗi phạm vi được phân bổ). Xóa có thể có được các khóa ở mức độ chi tiết (hàng hoặc trang) thấp hơn cũng như các khóa độc quyền trên bất kỳ trang nào được phân bổ.
- Chỉ cắt ngắn đảm bảo rằng tất cả các trang được phân bổ từ bảng heap. Việc xóa có thể để lại các trang trống trong một đống ngay cả khi một gợi ý khóa bảng độc quyền được chỉ định (ví dụ: nếu mức cách ly phiên bản hàng được bật cho cơ sở dữ liệu).
- Cắt bớt luôn được ghi lại tối thiểu (bất kể mô hình phục hồi đang sử dụng). Chỉ các hoạt động phân bổ trang được ghi lại trong nhật ký giao dịch.
- Cắt ngắn có thể sử dụng thả hoãn lại nếu đối tượng có kích thước 128 hoặc lớn hơn. Trì hoãn có nghĩa là công việc phân bổ thực tế được thực hiện không đồng bộ bởi một luồng máy chủ nền.
Làm thế nào để các chế độ phục hồi khác nhau ảnh hưởng đến từng tuyên bố? Có bất kỳ tác dụng nào không?
Xóa luôn được ghi lại đầy đủ (mỗi hàng bị xóa được ghi lại trong nhật ký giao dịch). Có một số khác biệt nhỏ trong nội dung của các bản ghi nhật ký nếu mô hình khôi phục khác FULL
, nhưng đây vẫn là ghi nhật ký đầy đủ về mặt kỹ thuật.
Khi xóa, tất cả các chỉ mục được quét hay chỉ những nơi có hàng? Tôi sẽ giả sử tất cả các chỉ mục được quét (và không tìm kiếm?)
Xóa một hàng trong một chỉ mục (sử dụng các gói cập nhật hẹp hoặc rộng được hiển thị trước đó) luôn là quyền truy cập theo khóa (tìm kiếm). Quét toàn bộ chỉ mục cho mỗi hàng bị xóa sẽ không hiệu quả khủng khiếp. Hãy xem lại kế hoạch cập nhật theo chỉ số được hiển thị trước đó:
Các kế hoạch thực hiện là các đường ống theo nhu cầu: các toán tử mẹ (bên trái) điều khiển các toán tử con thực hiện công việc bằng cách yêu cầu một hàng tại một thời điểm từ chúng. Các toán tử Sắp xếp đang chặn (chúng phải tiêu thụ toàn bộ đầu vào của chúng trước khi tạo hàng được sắp xếp đầu tiên), nhưng chúng vẫn bị điều khiển bởi cha mẹ của chúng (Xóa Chỉ mục) yêu cầu hàng đầu tiên đó. Xóa Chỉ mục kéo một hàng tại một thời điểm từ Sắp xếp hoàn thành, cập nhật chỉ mục không bao gồm mục tiêu cho mỗi hàng.
Trong một kế hoạch cập nhật rộng, bạn sẽ thường thấy các cột được thêm vào luồng hàng bởi toán tử cập nhật bảng cơ sở. Trong trường hợp này, Xóa chỉ mục cụm đã thêm các cột khóa chỉ mục không bao gồm vào luồng. Dữ liệu này được yêu cầu bởi công cụ lưu trữ để xác định vị trí hàng cần xóa khỏi chỉ mục không được bao gồm:
Các lệnh được nhân rộng như thế nào? Là lệnh SQL được gửi và xử lý trên mỗi thuê bao? Hay là SQL Server thông minh hơn thế một chút?
Cắt ngắn không được phép trên một bảng được xuất bản bằng cách sử dụng sao chép giao dịch hoặc hợp nhất. Việc xóa được sao chép như thế nào tùy thuộc vào loại sao chép và cách cấu hình. Ví dụ, sao chép ảnh chụp nhanh chỉ sao chép chế độ xem theo thời gian của bảng bằng các phương thức hàng loạt - các thay đổi gia tăng không được theo dõi hoặc áp dụng. Sao chép giao dịch hoạt động bằng cách đọc hồ sơ nhật ký và tạo các giao dịch phù hợp để áp dụng các thay đổi tại các thuê bao. Hợp nhất sao chép theo dõi các thay đổi bằng cách sử dụng kích hoạt và bảng siêu dữ liệu.
Đọc liên quan: Tối ưu hóa các truy vấn T-SQL thay đổi dữ liệu
DELETE
vàTRUNCATE
trong các câu trả lời cho câu hỏi này về tiện ích củaTRUNCATE
-ing ngay trước khi aDROP
. Bạn cũng có thể tự mình tìm kiếm trong nhật ký để nghiên cứu tác động của cả hai lệnh bằng cách sử dụng kỹ thuật được mô tả trong câu trả lời này .