(แต่เดิมนี่เป็นความเห็นต่อคำตอบของ @ DaveE แต่ฉันได้ใส่ไว้ในคำตอบของตัวเองเพราะมันยาว)
TRUNCATE คือการดำเนินการเข้าสู่ระบบ มันจะต้องเป็นอย่างอื่นมันไม่ได้เป็นไปตามข้อกำหนดของกรด อย่างไรก็ตามความแตกต่างระหว่างTRUNCATEและDELETE:
- การใช้พื้นที่บันทึก:
TRUNCATEบันทึกเฉพาะหน้า / ส่วนขยาย * อิสระDELETEบันทึกแต่ละแถว
- การใช้งานการล็อก:
TRUNCATEโดยทั่วไปจะใช้การล็อกน้อยลงเนื่องจากใช้การล็อกตารางและการล็อกหน้าซึ่งต่างจากการDELETEใช้การล็อกแถว **
IDENTITYsequences: TRUNCATEรีเซ็ตลำดับตัวตนบนตารางหากมี
(* ขอบเขต = 8 หน้า.) TRUNCATEจะบันทึก / ลบส่วนขยายหากอยู่ในตารางนั้นมิฉะนั้นจะบันทึก / ลบหน้าจากส่วนต่างผสม
** ผลข้างเคียงอย่างหนึ่งของเรื่องนี้ก็คือ DELETE FROM TABLEสามารถทิ้งหน้าเปล่าที่จัดสรรให้กับตารางได้ขึ้นอยู่กับว่าการดำเนินการสามารถล็อคตารางแบบเอกสิทธิ์เฉพาะบุคคลได้หรือไม่)
ดังนั้น (กลับไปที่คำถามเดิม) TRUNCATE TABLEจะสรุปได้ดีกว่าDELETE FROM TABLEถ้าคุณกำลังล้างตารางออก แต่ต้องการรักษาโครงสร้างไว้ (NB:TRUNCATEไม่สามารถใช้บนโต๊ะที่อ้างอิงโดยคีย์ต่างประเทศจากตารางอื่น)
ดังที่ระบุไว้ในความคิดเห็นของ @ Tullo ให้ตรวจสอบรูปแบบการกู้คืนฐานข้อมูลของคุณด้วย - ถ้าเต็มแล้วคุณต้องเริ่มทำการสำรองข้อมูลบันทึกหรือเปลี่ยนรูปแบบการกู้คืนของคุณให้ง่าย เมื่อคุณทำอย่างใดอย่างหนึ่งแล้วคุณอาจต้องการลดขนาดไฟล์บันทึกของคุณเป็นการดำเนินการครั้งเดียว (NB: ไฟล์บันทึกเท่านั้น ) เพื่อเรียกคืนพื้นที่ว่างทั้งหมด
ในที่สุดสิ่งอื่นที่ต้องระวัง - ตารางสถิติ เรียกใช้UPDATE STATISTICS <TABLENAME>' afterTRUNCATE /DELETE` เพื่อให้เครื่องมือเพิ่มประสิทธิภาพการสืบค้นไม่ได้รับสถิติเพิ่มขึ้น
TRUNCATE TABLEDELETE FROM