Điều chỉnh hiệu suất của Dữ liệu bảng thanh lọc trong SQL Server 2016

Aug 15 2020

Tôi phải Tự động xóa khối lượng dữ liệu khổng lồ từ bảng chính sang Lưu trữ.

Các bước tôi đang làm theo:

  1. Tôi đang chèn dữ liệu từ bảng chính vào bảng lưu trữ.

  2. Sau khi xác minh chéo số lượng trong cả hai bảng, xóa dữ liệu khỏi bảng chính.

Rủi ro: Câu lệnh Delete có thể ở trạng thái treo và DB sẽ ở chế độ khôi phục.

Lưu ý : chúng tôi không thể thực hiện bất kỳ thao tác DDL nào trên bảng chính vì đó là bảng giao dịch trực tiếp. Chúng ta có thể sử dụng DML.

  • Cơ sở dữ liệu: SQL Server 2016
  • Hệ điều hành: Windows và IIS

Trả lời

4 MTay Aug 15 2020 at 15:58

DDL là một trong những cách chính để tăng tốc độ xóa bản ghi, nhưng nhận thấy rằng DDL không phải là một tùy chọn và bạn đang đối mặt với 'trạng thái treo' cho các câu lệnh xóa, có lẽ tôi khuyên bạn nên xem xét xóa bản ghi hàng loạt?

Vui lòng xem liên kết và đây là một ví dụ truy vấn dựa trên liên kết:

DECLARE @Batch INT = 1000
WHILE 1 = 1
BEGIN
    DELETE TOP (@Batch)
    FROM MyTable
    WHERE Date < ‘20200401’';
    IF @@ROWCOUNT < @Batch BREAK
END

Trong trường hợp này, khi chúng tôi xóa theo Ngày, hãy đảm bảo rằng bạn đã có chỉ mục vào Ngày để SQL Server có thể nhanh chóng lấy các hàng đó. Bạn sẽ muốn tránh khóa cấp bảng.