Váš index dotaz ve skutečnosti nepodporuje, protože dotaz neodkazuje na úvodní klíčový sloupec. Musí tedy prohledat celou tabulku s tímto indexem nebo bez něj. Pokud je to něco, co spouštíte často, můžete zvážit index na DataPointDate, který by podporoval tuto operaci odstranění.
Pokud je DataPointID sloupec IDENTITY a DataPointDate je zadáno postupně, můžete také zvážit tuto variantu:
DECLARE @maxID INT;
SELECT @maxID = MAX(DataPointID)
FROM dbo.tblTSS_DataCollection
WHERE [DatapointDate] < DATEADD(D, -7, GETDATE());
DELETE dbo.tblTSS_DataCollection
WHERE DataPointID <= @maxID;
Další věc, kterou byste mohli zvážit (pokud k pomalosti přispívá odstranění a ne skenování), je (a) zajistit, aby váš protokol měl dostatek místa pro odstranění a nezabil vás hromadou automatických růstů a ( b) provádění práce v dávkách:
BEGIN TRANSACTION;
SELECT 1;
WHILE @@ROWCOUNT > 0
BEGIN
COMMIT TRANSACTION;
DELETE TOP (1000) dbo.tblTSS_DataCollection WHERE ...
END
COMMIT TRANSACTION;