Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL Server 2005 Excluir consulta SLOW


Seu índice realmente não oferece suporte à consulta, pois a consulta não faz referência à coluna de chave principal. Então, ele tem que varrer toda a tabela com ou sem esse índice. Você pode considerar um índice em DataPointDate sozinho para dar suporte a essa operação de exclusão se for algo que você executa com frequência.

Se DataPointID for uma coluna IDENTITY e DataPointDate for inserido sequencialmente, você também poderá considerar esta variação:
DECLARE @maxID INT;

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

DELETE dbo.tblTSS_DataCollection
  WHERE DataPointID <= @maxID;

Outra coisa que você pode considerar fazer (se for a exclusão e não a verificação contribuindo para a lentidão) é (a) garantir que seu log tenha espaço suficiente para acomodar a exclusão e não esteja matando você com um monte de autogrows e ( b) realizar o trabalho em lotes:
BEGIN TRANSACTION;

SELECT 1;

WHILE @@ROWCOUNT > 0
BEGIN
  COMMIT TRANSACTION;

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

COMMIT TRANSACTION;