วิธีการทิ้งโต๊ะขนาดใหญ่โดยมีผลกระทบน้อยที่สุดในการบันทึกการจัดส่ง?

Dec 31 2020

มีตารางที่เกี่ยวข้องกึ่งใหญ่สองตาราง (284,6876,609 แถว - 156,785,176 KB และ 4,2628,162 แถว - 2,212,464 KB) ในฐานข้อมูลบันทึกที่จัดส่งซึ่งจำเป็นต้องล้างหรือทิ้ง ฉันจะทิ้งตารางทั้งสองนี้ในขณะที่ลดผลกระทบในการบันทึกการจัดส่งได้อย่างไร

คำตอบ

11 J.D. Dec 31 2020 at 21:08

หากคุณDROPเป็นตารางจะทำให้มีการสร้างบันทึกน้อยที่สุดเนื่องจากไม่ได้บังคับให้การรวบรวมขยะเกิดขึ้นในพื้นที่ที่ใช้ในทันทีโดยพื้นฐานแล้วเพียงแค่ลบข้อมูลอ้างอิงออก ในทำนองเดียวกันคุณสามารถบรรลุผลลัพธ์เดียวกันได้ด้วยTRUNCATE(แม้ว่าฉันคิดว่าบนโต๊ะขนาดใหญ่อาจมีค่าใช้จ่ายมากกว่าDROPฉันจะต้องค้นคว้าข้อมูลนี้และอัปเดตคำตอบของฉันตามนั้น)

นี้เป็นบทความที่ดีจริงๆที่รายละเอียดว่าทำไมTRUNCATEและDROPการดำเนินงานเป็น seemlessly อย่างรวดเร็วและสร้างบันทึกน้อยที่สุดซึ่งเป็นเนื่องจากคุณสมบัติของ SQL Server ที่เรียกว่ารอการตัดบัญชีลดลง

ไม่ว่าจะด้วยวิธีใดหลีกเลี่ยงDELETEมิฉะนั้นจะสร้างบันทึกจำนวนมากที่จะต้องจัดส่งและนำไปใช้ซ้ำที่ฐานข้อมูลเป้าหมาย

คำถาม StackOverflowนี้มีคำตอบหลายคำตอบพร้อมข้อมูลที่ดีเกี่ยวกับการนำข้อมูลออกจากตารางขนาดใหญ่อย่างมีประสิทธิภาพ (บางคำถามอาจไม่ได้เกี่ยวข้องกับคำถามของคุณโดยเฉพาะ แต่เหมาะสำหรับการอ้างอิงในอนาคตหรือผู้ใช้รายอื่นที่มีปัญหาคล้ายกัน)