Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

SQL Server 2005 Hapus Kueri SLOW

Indeks Anda tidak benar-benar mendukung kueri karena kueri tidak mereferensikan kolom kunci utama. Jadi, ia harus memindai seluruh tabel dengan atau tanpa indeks ini. Anda dapat mempertimbangkan indeks pada DataPointDate saja untuk mendukung operasi penghapusan ini jika itu adalah sesuatu yang sering Anda jalankan.

Jika DataPointID adalah kolom IDENTITY, dan DataPointDate dimasukkan secara berurutan, Anda juga dapat mempertimbangkan variasi ini:

DECLARE @maxID INT;

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

DELETE dbo.tblTSS_DataCollection
  WHERE DataPointID <= @maxID;

Hal lain yang mungkin Anda pertimbangkan untuk dilakukan (jika penghapusan dan bukan pemindaian yang berkontribusi pada kelambatan) adalah (a) memastikan log Anda memiliki cukup ruang untuk mengakomodasi penghapusan, dan tidak membunuh Anda dengan banyak pertumbuhan otomatis, dan ( b) melakukan pekerjaan secara berkelompok:

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. Baris mana yang memiliki nilai tertinggi?

  2. Paging sisi server di SQL Server

  3. Putar hasil prosedur tersimpan?

  4. Format HTML di sp_send_dbmail

  5. Apa cara terbaik untuk menampilkan gambar dari database server sql di asp.net?