ฉันมีข้อมูลซ้ำสองสามรายการในฐานข้อมูลที่ฉันต้องการตรวจสอบดังนั้นสิ่งที่ฉันทำเพื่อดูว่ารายการใดซ้ำกันฉันทำสิ่งนี้:
SELECT relevant_field
FROM some_table
GROUP BY relevant_field
HAVING COUNT(*) > 1
ด้วยวิธีนี้ฉันจะได้รับแถวทั้งหมดที่มี related_field เกิดขึ้นมากกว่าหนึ่งครั้ง แบบสอบถามนี้ใช้เวลาในการดำเนินการเป็นมิลลิวินาที
ตอนนี้ฉันต้องการตรวจสอบรายการที่ซ้ำกันแต่ละรายการดังนั้นฉันคิดว่าฉันสามารถเลือกแต่ละแถวใน some_table โดยมีฟิลด์ที่เกี่ยวข้องในแบบสอบถามด้านบนดังนั้นฉันจึงทำดังนี้
SELECT *
FROM some_table
WHERE relevant_field IN
(
SELECT relevant_field
FROM some_table
GROUP BY relevant_field
HAVING COUNT(*) > 1
)
สิ่งนี้กลายเป็นว่าช้ามากด้วยเหตุผลบางประการ (ใช้เวลาไม่กี่นาที) เกิดอะไรขึ้นกันแน่ถึงทำให้มันช้าขนาดนั้น? related_field ถูกจัดทำดัชนี
ในที่สุดฉันก็ลองสร้างมุมมอง "temp_view" จากแบบสอบถามแรก(SELECT relevant_field FROM some_table GROUP BY relevant_field HAVING COUNT(*) > 1)
จากนั้นสร้างแบบสอบถามที่สองของฉันเป็นแบบนี้แทน:
SELECT *
FROM some_table
WHERE relevant_field IN
(
SELECT relevant_field
FROM temp_view
)
และใช้งานได้ดี MySQL ทำสิ่งนี้ในไม่กี่มิลลิวินาที
ผู้เชี่ยวชาญด้าน SQL คนใดที่สามารถอธิบายได้ว่าเกิดอะไรขึ้น