आपकी अनुक्रमणिका वास्तव में क्वेरी का समर्थन नहीं करती है क्योंकि क्वेरी प्रमुख कुंजी कॉलम का संदर्भ नहीं देती है। तो, उसे इस इंडेक्स के साथ या उसके बिना पूरी टेबल को स्कैन करना होगा। यदि आप इसे अक्सर चलाते हैं, तो आप इस डिलीट ऑपरेशन का समर्थन करने के लिए अकेले DataPointDate पर एक इंडेक्स पर विचार कर सकते हैं।
यदि DataPointID एक पहचान स्तंभ है, और 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;
एक और चीज जिसे आप करने पर विचार कर सकते हैं (यदि यह डिलीट है और स्कैन धीमेपन में योगदान नहीं दे रहा है) है (ए) यह सुनिश्चित करना कि आपके लॉग में डिलीट को समायोजित करने के लिए पर्याप्त जगह है, और आपको ऑटोग्रो के झुंड के साथ नहीं मार रहा है, और ( b) बैचों में कार्य करना:
BEGIN TRANSACTION;
SELECT 1;
WHILE @@ROWCOUNT > 0
BEGIN
COMMIT TRANSACTION;
DELETE TOP (1000) dbo.tblTSS_DataCollection WHERE ...
END
COMMIT TRANSACTION;