Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server 2005 Изтриване на заявка БАВНО

Вашият индекс всъщност не поддържа заявката, тъй като заявката не препраща към водещата ключова колона. Така че трябва да сканира цялата таблица със или без този индекс. Може да помислите за индекс само на DataPointDate, за да поддържате тази операция за изтриване, ако това е нещо, което изпълнявате често.

Ако DataPointID е колона IDENTITY и DataPointDate се въвежда последователно, може също да обмислите този вариант:

DECLARE @maxID INT;

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

DELETE dbo.tblTSS_DataCollection
  WHERE DataPointID <= @maxID;

Друго нещо, което може да помислите да направите (ако изтриването, а не сканирането допринася за забавянето) е (а) да се уверите, че вашият дневник има достатъчно място, за да побере изтриването, и не ви убива с куп авторастяния, и ( б) извършване на работата на партиди:

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. Има ли начин за преглед на последните скъпи заявки в Sql Server 2005?

  2. .NET SQL вмъкване бавно в сравнение с JDBC? (JDBC 4 пъти по-бърз)

  3. VS2012 - Опцията за създаване на таблица или показване на меню с данни от таблица не се показва в сървър/изследовател на база данни

  4. Как да свържа sql сървър с php с помощта на xampp?

  5. Какво е значението на SELECT ... FOR XML PATH(' ),1,1)?