|
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
www.sony-ak.com.
Terima kasih.
| Send
your comments or suggestions |
|
|
|