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