Indeks Anda tidak benar-benar mendukung kueri karena kueri tidak mereferensikan kolom kunci utama. Jadi, ia harus memindai seluruh tabel dengan atau tanpa indeks ini. Anda dapat mempertimbangkan indeks pada DataPointDate saja untuk mendukung operasi penghapusan ini jika itu adalah sesuatu yang sering Anda jalankan.
Jika DataPointID adalah kolom IDENTITY, dan DataPointDate dimasukkan secara berurutan, Anda juga dapat mempertimbangkan variasi ini:
DECLARE @maxID INT;
SELECT @maxID = MAX(DataPointID)
FROM dbo.tblTSS_DataCollection
WHERE [DatapointDate] < DATEADD(D, -7, GETDATE());
DELETE dbo.tblTSS_DataCollection
WHERE DataPointID <= @maxID;
Hal lain yang mungkin Anda pertimbangkan untuk dilakukan (jika penghapusan dan bukan pemindaian yang berkontribusi pada kelambatan) adalah (a) memastikan log Anda memiliki cukup ruang untuk mengakomodasi penghapusan, dan tidak membunuh Anda dengan banyak pertumbuhan otomatis, dan ( b) melakukan pekerjaan secara berkelompok:
BEGIN TRANSACTION;
SELECT 1;
WHILE @@ROWCOUNT > 0
BEGIN
COMMIT TRANSACTION;
DELETE TOP (1000) dbo.tblTSS_DataCollection WHERE ...
END
COMMIT TRANSACTION;