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

SQL Server 2005 Slet forespørgsel SLOW

Dit indeks understøtter ikke rigtig forespørgslen, da forespørgslen ikke refererer til den førende nøglekolonne. Så den skal scanne hele tabellen med eller uden dette indeks. Du kan overveje et indeks på DataPointDate alene for at understøtte denne sletning, hvis det er noget, du kører ofte.

Hvis DataPointID er en IDENTITY-kolonne, og DataPointDate indtastes sekventielt, kan du også overveje denne variant:

DECLARE @maxID INT;

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

DELETE dbo.tblTSS_DataCollection
  WHERE DataPointID <= @maxID;

En anden ting, du måske overvejer at gøre (hvis det er sletningen og ikke scanningen, der bidrager til langsomheden) er (a) at sikre, at din log har plads nok til at rumme sletningen og ikke dræber dig med en masse autovoksninger, og ( b) udføre arbejdet i partier:

BEGIN TRANSACTION;

SELECT 1;

WHILE @@ROWCOUNT > 0
BEGIN
  COMMIT TRANSACTION;

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

COMMIT TRANSACTION;



  1. 4 måder at finde rækker, der indeholder små bogstaver i MariaDB

  2. Kontroller, om kolonne/nøgle findes?

  3. T-SQL Stuff Kommando

  4. Oracle-forbindelsesstreng med fortegn @ i kodeord