Perintah DELETE dan TRUNCATE, Apa Bedanya?

Hehehe.. sebelumnya saya minta izin untuk pengarang aslinya seperti dibawah ini,… ceritanya gini… aku kan lagi browsing-browsing nyari bahan ttg MSSQL, maklum lah masih belajar juga.. eee dapet artikel menarik ini… ya udah aku pindahanin aja ke blog sendiri biar sewaktu-waktu kalo butuh referensi kagak usah susah-susah nyarinya😀, moga bermanfaat untuk yg lainnya ….

Author: Ariesa Rahardjo
Published: March 21, 2006
Visits: 1038 – Category: SQL Server

Apa perbedaan antara perintah DELETE dan TRUNCATE? Apa salah satu ada yang lebih cepat dari yang lainnya? Perintah DELETE akan melakukan log terhadap data untuk masing-masing row yang dihapus dan ini akan mengakibatkan transaction log Anda bisa membengkak ukurannya. Namun demikian, jika Anda menjalankan database Anda dalam mode full recovery, maka hal tersebut wajib dilakukan karena akan memudahkan SQL Server untuk melakukan recovery jika sewaktu-waktu terjadi bencana pada database Anda. Tetapi kita bisa ambil dari fakta di atas bahwa setiap data akan di log ke dalam transaction log dan itu sudah cukup menjelaskan bahwa perintah DELETE bisa menjadi lambat.

Sementara itu, perintah TRUNCATE lebih cepat daripada DELETE dan ini dilihat dari cara perintah TRUNCATE dalam “menghapus” data. Pada kenyataannya, perintah TRUNCATE tidak menghapus data, tetapi dia akan men-dealokasi semua data page dan menghapus pointer yang menuju ke indexnya. Data sebenarnya masih ada dan baru akan hilang apabila lokasinya ditumpangi data baru atau bila Anda melakukan database shrinking. Aktivitas dari perintah TRUNCATE tersebut tidak memerlukan resource yang besar dan maka dari itu perintah ini bisa berjalan dengan sangat cepat. Adalah pendapat yang salah pula jika perintah TRUNCATE itu tidak di-log. Proses dealokasi data page tadi sebenarnya juga direkam ke dalam transaction log file. Menurut Books OnLine SQL Server menyatakan bahwa operasi TRUNCATE merupakan operasi yang sifatnya “minimally logged operation”. Anda dapat menggunakan perintah TRUNCATE di dalam suatu transaction database, dan ketika transaction ini Anda roll-back, maka data page akan dialokasikan kembali dan database kembali ke keadaan seperti sebelum perintah TRUNCATE dijalankan.

Beberapa keterbatasan dari perintah TRUNCATE adalah:
Anda harus bertindak sebagai db_owner, ddl_admin atau owner dari tabel agar bisa menjalankan perintah TRUNCATE ini.
TRUNCATE tidak akan jalan pada tabel yang direferensikan oleh satu atau lebih FOREIGN KEY constraint.

Jika TRUNCATE lebih cepat daripada DELETE maka mengapa kita harus menggunakan DELETE? Tunggu dulu. TRUNCATE merupakan pendekatan “all-or-nothing” dalam proses menghapus data. Anda tentu saja tidak bisa menentukan kriteria pada data tertentu yang hendak dihapus jika menggunakan perintah TRUNCATE. Pilihannya hanya ada dua, hapus semua atau tidak ada yang dihapus sama sekali. OK, sekarang pilihan tinggal di tangan Anda.

Referensi
sql-server-performance.com

Demikian tulisan singkat mengenai perbedaan antara perintah DELETE dan TRUNCATE pada SQL Server. Semoga berguna bagi Anda semuanya. Jika ada komentar atau saran bisa dikirimkan melalui ariesa.rahardjo@gmail.com. Untuk membaca tulisan menarik lainnya silakan menuju ke situs Sony AK Knowledge Center dengan alamat di http://www.sony-ak.com.

Terima kasih.

One thought on “Perintah DELETE dan TRUNCATE, Apa Bedanya?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s