Twój indeks tak naprawdę nie obsługuje zapytania, ponieważ zapytanie nie odwołuje się do wiodącej kolumny klucza. Musi więc przeskanować całą tabelę z tym indeksem lub bez niego. Możesz rozważyć indeks tylko w DataPointDate, aby obsługiwać tę operację usuwania, jeśli jest to coś, co często uruchamiasz.
Jeśli DataPointID jest kolumną IDENTITY, a DataPointDate jest wprowadzana sekwencyjnie, możesz również rozważyć tę odmianę:
DECLARE @maxID INT;
SELECT @maxID = MAX(DataPointID)
FROM dbo.tblTSS_DataCollection
WHERE [DatapointDate] < DATEADD(D, -7, GETDATE());
DELETE dbo.tblTSS_DataCollection
WHERE DataPointID <= @maxID;
Inną rzeczą, którą możesz rozważyć (jeśli to usuwanie, a nie skanowanie przyczyniające się do spowolnienia), to (a) upewnienie się, że twój dziennik ma wystarczająco dużo miejsca na usunięcie i nie zabija cię wieloma autogrowami i ( b) wykonywanie pracy partiami:
BEGIN TRANSACTION;
SELECT 1;
WHILE @@ROWCOUNT > 0
BEGIN
COMMIT TRANSACTION;
DELETE TOP (1000) dbo.tblTSS_DataCollection WHERE ...
END
COMMIT TRANSACTION;