sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server 2005 Ta bort fråga SLOW

Ditt index stöder inte riktigt frågan eftersom frågan inte refererar till den inledande nyckelkolumnen. Så den måste skanna hela tabellen med eller utan detta index. Du kan överväga ett index på DataPointDate enbart för att stödja denna raderingsoperation om det är något du kör ofta.

Om DataPointID är en IDENTITY-kolumn och DataPointDate skrivs in sekventiellt kan du också överväga denna 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 annan sak du kan tänka dig att göra (om det är borttagningen och inte skanningen som bidrar till långsamheten) är (a) att se till att din logg har tillräckligt med utrymme för borttagningen och inte dödar dig med en massa autotillväxter, och ( b) utföra arbetet i omgångar:

BEGIN TRANSACTION;

SELECT 1;

WHILE @@ROWCOUNT > 0
BEGIN
  COMMIT TRANSACTION;

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

COMMIT TRANSACTION;



  1. MySQL kolumntyp TIMESTAMP inkluderar implicit INTE NULL DEFAULT CURRENT_TIMESTAMP ON UPPDATERING CURRENT_TIMESTAMP

  2. Flera tabeller eller en mega-tabell i SQL?

  3. Får fel när data lagras i sql server 2005 via textrutan

  4. PHP-skript för att fylla i MySQL-tabeller