Chỉ mục của bạn không thực sự hỗ trợ truy vấn vì truy vấn không tham chiếu đến cột quan trọng hàng đầu. Vì vậy, nó phải quét toàn bộ bảng có hoặc không có chỉ mục này. Bạn có thể xem xét một chỉ mục trên DataPointDate để hỗ trợ thao tác xóa này nếu đó là thứ bạn thường xuyên chạy.
Nếu DataPointID là cột IDENTITY và DataPointDate được nhập tuần tự, bạn cũng có thể xem xét biến thể này:
DECLARE @maxID INT;
SELECT @maxID = MAX(DataPointID)
FROM dbo.tblTSS_DataCollection
WHERE [DatapointDate] < DATEADD(D, -7, GETDATE());
DELETE dbo.tblTSS_DataCollection
WHERE DataPointID <= @maxID;
Một điều khác mà bạn có thể cân nhắc thực hiện (nếu việc xóa chứ không phải quá trình quét góp phần gây ra sự chậm chạp) là (a) đảm bảo nhật ký của bạn có đủ chỗ để xóa và không giết bạn bằng một loạt các trình duyệt tự động và ( b) thực hiện công việc theo lô:
BEGIN TRANSACTION;
SELECT 1;
WHILE @@ROWCOUNT > 0
BEGIN
COMMIT TRANSACTION;
DELETE TOP (1000) dbo.tblTSS_DataCollection WHERE ...
END
COMMIT TRANSACTION;