クエリは先頭のキー列を参照していないため、インデックスは実際にはクエリをサポートしていません。したがって、このインデックスの有無にかかわらず、テーブル全体をスキャンする必要があります。頻繁に実行するものである場合は、この削除操作をサポートするために、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;
あなたがすることを検討するかもしれないもう1つのこと(それが削除であり、速度低下の原因となるスキャンではない場合)は、(a)ログに削除に対応するのに十分なスペースがあり、自動拡張の束であなたを殺していないことを確認することです。 b) バッチで作業を実行する:
BEGIN TRANSACTION;
SELECT 1;
WHILE @@ROWCOUNT > 0
BEGIN
COMMIT TRANSACTION;
DELETE TOP (1000) dbo.tblTSS_DataCollection WHERE ...
END
COMMIT TRANSACTION;