-
Jika Anda Menghapus Semua baris dalam tabel itu, opsi paling sederhana adalah dengan Memotong tabel, seperti
TRUNCATE TABLE LargeTable GO
Tabel terpotong hanya akan mengosongkan tabel, Anda tidak dapat menggunakan klausa WHERE untuk membatasi baris yang akan dihapus dan tidak ada pemicu yang akan diaktifkan.
-
Di sisi lain jika Anda menghapus lebih dari 80-90 Persen data, katakanlah jika Anda memiliki total 11 juta baris dan Anda ingin menghapus 10 juta, cara lain adalah dengan Menyisipkan 1 juta baris ini (catatan yang ingin Anda simpan ) ke meja pementasan lain. Potong tabel besar ini dan Sisipkan kembali 1 juta baris ini.
-
Atau jika izin/tampilan atau objek lain yang memiliki tabel besar ini sebagai tabel dasarnya tidak terpengaruh dengan menjatuhkan tabel ini, Anda bisa memasukkan jumlah baris yang relatif kecil ini ke tabel lain, letakkan tabel ini dan buat tabel lain dengan yang sama skema, dan impor baris ini kembali ke tabel ex-Large ini.
-
Satu opsi terakhir yang dapat saya pikirkan adalah mengubah
Recovery Mode to SIMPLE
basis data Anda lalu hapus baris dalam batch yang lebih kecil menggunakan loop while seperti ini:DECLARE @Deleted_Rows INT; SET @Deleted_Rows = 1; WHILE (@Deleted_Rows > 0) BEGIN -- Delete some small number of rows at a time DELETE TOP (10000) LargeTable WHERE readTime < dateadd(MONTH,-7,GETDATE()) SET @Deleted_Rows = @@ROWCOUNT; END
dan jangan lupa untuk mengubah mode Pemulihan kembali ke penuh dan saya pikir Anda harus mengambil cadangan untuk membuatnya sepenuhnya efektif (perubahan atau mode pemulihan).