Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SQL Server 2005 Supprimer la requête LENTE

Votre index ne prend pas vraiment en charge la requête car la requête ne fait pas référence à la colonne de clé principale. Il doit donc parcourir toute la table avec ou sans cet index. Vous pouvez envisager un index sur DataPointDate seul pour prendre en charge cette opération de suppression si c'est quelque chose que vous exécutez souvent.

Si DataPointID est une colonne IDENTITY et que DataPointDate est saisi de manière séquentielle, vous pouvez également envisager cette variation :

DECLARE @maxID INT;

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

DELETE dbo.tblTSS_DataCollection
  WHERE DataPointID <= @maxID;

Une autre chose que vous pourriez envisager de faire (si c'est la suppression et non l'analyse qui contribue à la lenteur) est (a) de vous assurer que votre journal dispose de suffisamment d'espace pour accueillir la suppression, et ne vous tue pas avec un tas de croissances automatiques, et ( b) effectuer le travail par lots :

BEGIN TRANSACTION;

SELECT 1;

WHILE @@ROWCOUNT > 0
BEGIN
  COMMIT TRANSACTION;

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

COMMIT TRANSACTION;