Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL Server 2005 Elimina query LENTA

Il tuo indice in realtà non supporta la query poiché la query non fa riferimento alla colonna chiave principale. Quindi, deve scansionare l'intera tabella con o senza questo indice. Potresti considerare un indice solo su DataPointDate per supportare questa operazione di eliminazione se è qualcosa che esegui spesso.

Se DataPointID è una colonna IDENTITY e DataPointDate viene inserito in sequenza, potresti anche considerare questa variazione:

DECLARE @maxID INT;

SELECT @maxID = MAX(DataPointID) 
  FROM dbo.tblTSS_DataCollection
  WHERE [DatapointDate] < DATEADD(D, -7, GETDATE());

DELETE dbo.tblTSS_DataCollection
  WHERE DataPointID <= @maxID;

Un'altra cosa che potresti considerare di fare (se è l'eliminazione e non la scansione che contribuisce alla lentezza) è (a) assicurarti che il tuo registro abbia abbastanza spazio per ospitare l'eliminazione e non ti stia uccidendo con un mucchio di autogrow, e ( b) eseguire i lavori in lotti:

BEGIN TRANSACTION;

SELECT 1;

WHILE @@ROWCOUNT > 0
BEGIN
  COMMIT TRANSACTION;

  DELETE TOP (1000) dbo.tblTSS_DataCollection WHERE ...
END

COMMIT TRANSACTION;