ฉันปรับโครงสร้างส่วนที่ช้าของแอปพลิเคชันที่เราสืบทอดจาก บริษัท อื่นให้ใช้การเข้าร่วมภายในแทนแบบสอบถามย่อยเช่น:
WHERE id IN (SELECT id FROM ...)
แบบสอบถามที่มีการปรับโครงสร้างใหม่จะทำงานได้เร็วขึ้นประมาณ 100x (~ 50 วินาทีถึง ~ 0.3) ฉันคาดว่าจะได้รับการปรับปรุง แต่ใคร ๆ ก็สามารถอธิบายได้ว่าทำไมมันถึงรุนแรง คอลัมน์ที่ใช้ในส่วนคำสั่ง where ถูกทำดัชนีทั้งหมด SQL ดำเนินการค้นหาในส่วนคำสั่ง where หนึ่งครั้งต่อแถวหรือบางอย่างหรือไม่?
อัปเดต - อธิบายผลลัพธ์:
ความแตกต่างอยู่ในส่วนที่สองของแบบสอบถาม "where id in ()" -
2 DEPENDENT SUBQUERY submission_tags ref st_tag_id st_tag_id 4 const 2966 Using where
vs 1 แถวที่จัดทำดัชนีโดยมีส่วนร่วม:
SIMPLE s eq_ref PRIMARY PRIMARY 4 newsladder_production.st.submission_id 1 Using index