Вашият индекс всъщност не поддържа заявката, тъй като заявката не препраща към водещата ключова колона. Така че трябва да сканира цялата таблица със или без този индекс. Може да помислите за индекс само на DataPointDate, за да поддържате тази операция за изтриване, ако това е нещо, което изпълнявате често.
Ако DataPointID е колона IDENTITY и DataPointDate се въвежда последователно, може също да обмислите този вариант:
DECLARE @maxID INT;
SELECT @maxID = MAX(DataPointID)
FROM dbo.tblTSS_DataCollection
WHERE [DatapointDate] < DATEADD(D, -7, GETDATE());
DELETE dbo.tblTSS_DataCollection
WHERE DataPointID <= @maxID;
Друго нещо, което може да помислите да направите (ако изтриването, а не сканирането допринася за забавянето) е (а) да се уверите, че вашият дневник има достатъчно място, за да побере изтриването, и не ви убива с куп авторастяния, и ( б) извършване на работата на партиди:
BEGIN TRANSACTION;
SELECT 1;
WHILE @@ROWCOUNT > 0
BEGIN
COMMIT TRANSACTION;
DELETE TOP (1000) dbo.tblTSS_DataCollection WHERE ...
END
COMMIT TRANSACTION;