Baru-baru ini seorang teman bertanya kepada saya, dia mengatakan bahwa sangat lambat baginya untuk menghapus jutaan hingga puluhan juta data di SQLSERVER. Saya membantunya menganalisisnya dan memberikan beberapa saran sebagai berikut juga sangat panjang. Saya belum menulis blog, mari kita bahas bersama.
Jika ruang hard disk Anda kecil, dan Anda tidak ingin mengatur database log ke minimum (karena Anda ingin log normal lainnya tetap ada). direkam), dan Anda memiliki persyaratan kecepatan yang relatif tinggi, dan menghapus semua data, saya sarankan Anda Gunakan turncate table1, karena truncate adalah operasi DDL, tidak menghasilkan rollback, dan lebih cepat jika tidak menulis log Lalu jika ada adalah kenaikan otomatis, itu akan dikembalikan ke 1, dan penghapusan akan menghasilkan rollback. Jika Anda menghapus tabel dengan data dalam jumlah besar, kecepatannya akan sangat lambat, itu akan menempati banyak segmen rollback, dan juga mencatat log tingkat G; tentu saja, bagaimana jika ada penghapusan bersyarat seperti di mana waktu<'2006-3-10'? Dapatkah saya menggunakan penghapusan tanpa pencatatan? Jawabannya adalah tidak, mesin SQL Server dirancang untuk menghapus log operasi. Sejauh ini tidak ada cara untuk memaksa pernyataan tertentu agar tidak dicatat dalam log. Jika Delete Table1 dimana Time < '2006-3-10' dijalankan, catatan log akan sangat besar (3-4G) karena jumlahnya banyak. catatan yang terlibat. Jika memungkinkan, saya menyarankan metode berikut:
pilih catatan yang perlu Anda simpan ke tabel baru. Jika Anda menggunakan Mode Pemulihan Penuh
Tergantung pada jumlah catatan SELECT INTO, log mungkin lebih besar.
Pilih * ke dalam Tabel2 Dari Tabel1 Dimana Waktu > = '10-03-2006'
lalu langsung Potong Tabel1. Tidak ada pencatatan yang akan terjadi apa pun model pemulihannya
Pangkas tabel Tabel1
dan terakhir ganti nama Tabel2 menjadi Tabel1
EC sp_rename 'Tabel2', 'Tabel1'
Sumber: BLOG:kolom domino