(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 TRUNCATE
dan DELETE
:
- Penggunaan ruang log:
TRUNCATE
hanya log halaman / luasan * yang dibebaskan, sedangkan DELETE
log setiap baris.
- Penggunaan kunci:
TRUNCATE
umumnya akan menggunakan lebih sedikit kunci, karena dibutuhkan kunci meja dan kunci halaman, sebagai lawan dari DELETE
yang menggunakan kunci baris **.
IDENTITY
urutan: TRUNCATE
mengatur ulang urutan identitas pada tabel, jika ada.
(* Tingkat = 8 halaman. TRUNCATE
Akan 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 TABLE
berpotensi dapat membiarkan halaman kosong dialokasikan ke tabel, tergantung pada apakah operasi bisa mendapatkan kunci tabel eksklusif atau tidak.)
Jadi (kembali ke pertanyaan awal), TRUNCATE TABLE
konklusif lebih baik daripada DELETE FROM TABLE
jika Anda mengosongkan tabel tetapi ingin mempertahankan strukturnya (NB: TRUNCATE
tidak 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>' after
TRUNCATE /
DELETE` sehingga optimizer kueri tidak tersandung oleh statistik lama.
TRUNCATE TABLE
bukanDELETE FROM
.