(Ini awalnya adalah komentar untuk jawaban @ DaveE, tapi saya sudah memasukkannya ke dalam jawabannya sendiri karena sudah lama)
TRUNCATE adalah operasi yang dicatat. Itu harus dinyatakan tidak memenuhi syarat ACID. Namun, perbedaan antara TRUNCATEdan DELETE:
- Penggunaan ruang log:
TRUNCATEhanya log halaman / luasan * yang dibebaskan, sedangkan DELETElog setiap baris.
- Penggunaan kunci:
TRUNCATEumumnya akan menggunakan lebih sedikit kunci, karena dibutuhkan kunci meja dan kunci halaman, sebagai lawan dari DELETEyang menggunakan kunci baris **.
IDENTITYurutan: TRUNCATEmengatur ulang urutan identitas pada tabel, jika ada.
(* Tingkat = 8 halaman. TRUNCATEAkan mencatat / menghapus luasan jika semuanya dari satu tabel itu, jika tidak maka akan mencatat / menghapus halaman dari luasan campuran.
** Satu efek samping dari hal ini adalah bahwa DELETE FROM TABLEberpotensi dapat membiarkan halaman kosong dialokasikan ke tabel, tergantung pada apakah operasi bisa mendapatkan kunci tabel eksklusif atau tidak.)
Jadi (kembali ke pertanyaan awal), TRUNCATE TABLEkonklusif lebih baik daripada DELETE FROM TABLEjika Anda mengosongkan tabel tetapi ingin mempertahankan strukturnya (NB: TRUNCATEtidak dapat digunakan pada tabel yang dirujuk oleh kunci asing dari tabel lain).
Seperti tercantum dalam komentar @ Tullo, periksa juga model pemulihan basis data Anda - jika penuh, maka Anda harus mulai mengambil cadangan log, atau mengubah model pemulihan menjadi sederhana. Setelah Anda melakukan salah satu dari itu, Anda mungkin ingin mengecilkan file log Anda sebagai operasi sekali saja (NB: file log saja ) untuk mendapatkan kembali semua ruang kosong itu.
Akhirnya, hal lain yang perlu diperhatikan - tabel statistik. jalankan UPDATE STATISTICS <TABLENAME>' afterTRUNCATE /DELETE` sehingga optimizer kueri tidak tersandung oleh statistik lama.
TRUNCATE TABLEbukanDELETE FROM.