sql >> Databáze >  >> RDS >> Sqlserver

SQL Server 2005 Odstranění dotazu SLOW

Váš index dotaz ve skutečnosti nepodporuje, protože dotaz neodkazuje na úvodní klíčový sloupec. Musí tedy prohledat celou tabulku s tímto indexem nebo bez něj. Pokud je to něco, co spouštíte často, můžete zvážit index na DataPointDate, který by podporoval tuto operaci odstranění.

Pokud je DataPointID sloupec IDENTITY a DataPointDate je zadáno postupně, můžete také zvážit tuto variantu:

DECLARE @maxID INT;

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

DELETE dbo.tblTSS_DataCollection
  WHERE DataPointID <= @maxID;

Další věc, kterou byste mohli zvážit (pokud k pomalosti přispívá odstranění a ne skenování), je (a) zajistit, aby váš protokol měl dostatek místa pro odstranění a nezabil vás hromadou automatických růstů a ( b) provádění práce v dávkách:

BEGIN TRANSACTION;

SELECT 1;

WHILE @@ROWCOUNT > 0
BEGIN
  COMMIT TRANSACTION;

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

COMMIT TRANSACTION;



  1. Jak přidám další členy do svého sloupce typu ENUM v MySQL?

  2. Používáte LIMIT v rámci GROUP BY k získání N výsledků na skupinu?

  3. Optimalizujte fulltextové vyhledávání ve více tabulkách

  4. group_concat Nový řádek MYSQL