sql >> Base de Datos >  >> RDS >> Sqlserver

SQL Server 2005 Eliminar consulta LENTO

Su índice realmente no admite la consulta, ya que la consulta no hace referencia a la columna clave principal. Entonces, tiene que escanear toda la tabla con o sin este índice. Podría considerar un índice solo en DataPointDate para respaldar esta operación de eliminación si es algo que ejecuta con frecuencia.

Si DataPointID es una columna de IDENTIDAD y DataPointDate se ingresa secuencialmente, también podría considerar esta variación:

DECLARE @maxID INT;

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

DELETE dbo.tblTSS_DataCollection
  WHERE DataPointID <= @maxID;

Otra cosa que podría considerar hacer (si es la eliminación y no el escaneo lo que contribuye a la lentitud) es (a) asegurarse de que su registro tenga suficiente espacio para acomodar la eliminación, y no lo esté matando con un montón de crecimientos automáticos, y ( b) realizar el trabajo por lotes:

BEGIN TRANSACTION;

SELECT 1;

WHILE @@ROWCOUNT > 0
BEGIN
  COMMIT TRANSACTION;

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

COMMIT TRANSACTION;