[Oracle] ความแตกต่างระหว่าง TRUNCATE และ DELETE

พอดีมีปัญหาในการลบข้อมูลในการทำงาน ซึ่งต้องลบข้อมูลจากตารางเดิมออกให้หมด แล้วทำการบันทึกข้อมูลใหม่เข้าไป ตอนแรกที่ทำไว้ก็คือ ใช้คำสั่ง

DELETE FROM XX

ตอนข้อมูลไม่เยอะก็ทำงานได้ดีไม่มีปัญหาอะไร แต่พอข้อมูลเยอะขึ้นเรื่อย ก็จะช้ามากขึ้น เนื่องจากข้อมูลมี Index, PK, FK Constraints อยู่พอสมควร ก็เลยเปลี่ยนมาใช้ คำสั่ง

TRUNCATE TABLE XX 

แทนซึ่งก็ช่วยได้มาก แต่ TRUNCATE เองก็มีข้อจำกัดเหมือนกัน จากการหาข้อมูลก็เจอข้อแตกต่างดังนี้
0. TRUNCATE เป็นคำสั่งใน กลุ่ม DDL (Data Definition Language)
1. TRUNCATE ทำงานได้เร็วกว่า DELETE
2. TRUNCATE ไม่สามารถทำการ Rollback
3. ไม่สามารถระบุ เงื่อนไข WHERE ใน TRUNCATE
4. Triggers จะไม่ทำงานกับคำสั่ง TRUNCATE (กรณีมีการใช้ Triggers ในการตรวจตราการเปลี่ยนแปลงของข้อมูล)
สาเหตุหลัก ประมาณ 5 ข้อที่ว่านี่ละครับที่ทำให้ TRUNCATE ทำงานได้เร็วกว่า DELETE

หมายเหตุ : คำสั่งในกลุ่ม DDL, DCL (Data Control Language) ไม่สามารถ Rollback ได้
ข้อมูลอ้างอิง :
Difference between TRUNCATE, DELETE and DROP commands
Oracle Truncate Table

  1. No comments yet.

  1. No trackbacks yet.