Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server 2005 Usuń zapytanie SLOW

Twój indeks tak naprawdę nie obsługuje zapytania, ponieważ zapytanie nie odwołuje się do wiodącej kolumny klucza. Musi więc przeskanować całą tabelę z tym indeksem lub bez niego. Możesz rozważyć indeks tylko w DataPointDate, aby obsługiwać tę operację usuwania, jeśli jest to coś, co często uruchamiasz.

Jeśli DataPointID jest kolumną IDENTITY, a DataPointDate jest wprowadzana sekwencyjnie, możesz również rozważyć tę odmianę:

DECLARE @maxID INT;

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

DELETE dbo.tblTSS_DataCollection
  WHERE DataPointID <= @maxID;

Inną rzeczą, którą możesz rozważyć (jeśli to usuwanie, a nie skanowanie przyczyniające się do spowolnienia), to (a) upewnienie się, że twój dziennik ma wystarczająco dużo miejsca na usunięcie i nie zabija cię wieloma autogrowami i ( b) wykonywanie pracy partiami:

BEGIN TRANSACTION;

SELECT 1;

WHILE @@ROWCOUNT > 0
BEGIN
  COMMIT TRANSACTION;

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

COMMIT TRANSACTION;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak połączyć się z bazą danych SQL Server w CodeIgniter?

  2. DODAJ godzinę 23:59:59.999 do daty zakończenia dla między

  3. Utwórz niestandardowy komunikat o błędzie w ograniczeniach sprawdzania w SQL SERVER 2008

  4. Jaka jest kolejność wykonywania tej instrukcji SQL?

  5. Jak zmniejszyć rozmiar tabeli SQL Server, która wzrosła po zmianie typu danych?