ล่าสุดเพื่อนถามผม เขาบอกว่าการลบข้อมูลใน SQLSERVER นับล้านถึงหลายสิบล้านนั้นช้ามาก ผมช่วยเขาวิเคราะห์และให้คำแนะนำดังนี้ มันอาจจะเป็นประโยชน์กับหลายๆ คนก็ได้ ยาวมากเช่นกัน ฉันยังไม่ได้เขียนบล็อก มาพูดคุยกัน
หากพื้นที่ฮาร์ดดิสก์ของคุณมีขนาดเล็กและคุณไม่ต้องการตั้งค่าบันทึกฐานข้อมูลให้เหลือน้อยที่สุด (เพราะคุณต้องการให้บันทึกปกติอื่น ๆ ยังคงอยู่ บันทึกไว้) และคุณมีความต้องการความเร็วค่อนข้างสูง และล้างข้อมูลทั้งหมด ฉันขอแนะนำให้คุณใช้ Turncate table1 เนื่องจากการตัดทอนเป็นการดำเนินการ DDL จึงไม่สร้างการย้อนกลับ และจะเร็วกว่าหากไม่ได้เขียนบันทึก เป็นการเพิ่มขึ้นอัตโนมัติ มันจะถูกคืนค่าเป็น 1 และการลบจะสร้างการย้อนกลับ หากคุณลบตารางที่มีข้อมูลจำนวนมาก ความเร็วจะช้ามาก มันจะครอบครองส่วนการย้อนกลับจำนวนมาก และด้วย บันทึกบันทึกระดับ G แน่นอนว่าจะเกิดอะไรขึ้นถ้ามีการลบแบบมีเงื่อนไขเช่น Where time<'2006-3-10' ฉันสามารถใช้ Delete โดยไม่ต้องบันทึกได้หรือไม่ คำตอบคือ ไม่ กลไกของ SQL Server ได้รับการออกแบบมาเพื่อบันทึก Delete การดำเนินงาน จนถึงขณะนี้ยังไม่มีวิธีบังคับให้คำสั่งบางอย่างไม่ถูกบันทึกลงในบันทึก หาก Delete Table1 โดยที่ Time < '2006-3-10' ถูกดำเนินการ บันทึกบันทึกจะมีขนาดใหญ่มาก (3-4G) เนื่องจากมีจำนวนมาก บันทึกที่เกี่ยวข้อง หากเป็นไปได้ ฉันขอแนะนำวิธีการต่อไปนี้:
เลือกบันทึกที่คุณต้องการเก็บไว้ในตารางใหม่ หากคุณใช้โหมดการกู้คืนแบบเต็ม
บันทึกอาจมีขนาดใหญ่ขึ้น ขึ้นอยู่กับจำนวนบันทึก SELECT INTO
เลือก * ลงใน Table2 จาก Table1 โดยที่ Time > = '2006-03-10'
จากนั้นตัดทอน Table1 โดยตรง จะไม่มีการบันทึกเกิดขึ้นโดยไม่คำนึงถึงรูปแบบการกู้คืน
ตัดทอนตาราง Table1
และเปลี่ยนชื่อ Table2 เป็น Table1 ในที่สุด
EC sp_rename 'Table2', 'Table1'
แหล่งที่มา: BLOG: คอลัมน์ของโดมิโน