ฉันรู้ว่านี่เป็นโพสต์เก่า แต่ฉันคิดว่านี่เป็นหัวข้อที่สำคัญมากโดยเฉพาะอย่างยิ่งในปัจจุบันที่เรามีบันทึก 10M + และพูดถึงข้อมูลเทราไบต์
ฉันจะให้น้ำหนักกับข้อสังเกตต่อไปนี้ด้วย ฉันมีระเบียนประมาณ 45 ล้านรายการในตารางของฉัน ([ข้อมูล]) และประมาณ 300 รายการในตาราง [แมว] ของฉัน ฉันมีการจัดทำดัชนีที่ครอบคลุมสำหรับคำถามทั้งหมดที่ฉันกำลังจะพูดถึง
พิจารณาตัวอย่างที่ 1:
UPDATE d set category = c.categoryname
FROM [data] d
JOIN [cats] c on c.id = d.catid
เทียบกับตัวอย่างที่ 2:
UPDATE d set category = (SELECT TOP(1) c.categoryname FROM [cats] c where c.id = d.catid)
FROM [data] d
ตัวอย่างที่ 1 ใช้เวลาประมาณ 23 นาทีในการรัน ตัวอย่างที่ 2 ใช้เวลาประมาณ 5 นาที
ดังนั้นฉันจะสรุปว่าแบบสอบถามย่อยในกรณีนี้เร็วกว่ามาก แน่นอนว่าฉันใช้ไดรฟ์ M.2 SSD ที่มีความสามารถ i / o @ 1GB / วินาที (นั่นคือไบต์ไม่ใช่บิต) ดังนั้นดัชนีของฉันก็เร็วเช่นกัน ดังนั้นสิ่งนี้อาจส่งผลต่อความเร็วเช่นกันในสถานการณ์ของคุณ
หากเป็นการล้างข้อมูลเพียงครั้งเดียวอาจเป็นการดีที่สุดที่จะปล่อยให้มันทำงานและเสร็จสิ้น ฉันใช้ TOP (10000) และดูว่าใช้เวลานานแค่ไหนและคูณด้วยจำนวนระเบียนก่อนที่ฉันจะตอบแบบสอบถามใหญ่
หากคุณกำลังเพิ่มประสิทธิภาพฐานข้อมูลการผลิตฉันขอแนะนำอย่างยิ่งให้ใช้ข้อมูลก่อนการประมวลผลเช่นใช้ทริกเกอร์หรือนายหน้าจัดหางานในการอัปเดตเร็กคอร์ดแบบ async เพื่อให้การเข้าถึงแบบเรียลไทม์ดึงข้อมูลคงที่