ความแตกต่างระหว่าง Hash, Merge และ Loop เข้าร่วมหรือไม่


40

ใน SQL Server คุณสามารถระบุคำแนะนำการเข้าร่วม:

  • เข้าร่วมแฮช
  • รวมเข้าด้วยกัน
  • เข้าร่วมLOOP

คำจำกัดความของการเข้าร่วมทั้งสามคำจำกัดความคืออะไรและแต่ละคนควรใช้เมื่อใด

คำตอบ:


37

จาก MSDN ในหัวข้อแนวคิดการปรับแต่งการสืบค้นขั้นสูง :

SQL Server ใช้การดำเนินการเข้าร่วมสามประเภท:

  • การวนซ้ำซ้อนกันเข้าร่วม

  • ผสานเข้าด้วยกัน

  • Hash เข้าร่วม

หากหนึ่งอินพุตเข้าร่วมมีขนาดเล็ก (น้อยกว่า 10 แถว) และอีกอินพุทเข้าร่วมมีขนาดใหญ่พอสมควรและจัดทำดัชนีในคอลัมน์เข้าร่วมดัชนีซ้อนซ้อนลูปดัชนีเข้าร่วมเป็นการดำเนินการเข้าร่วมที่เร็วที่สุดเนื่องจากต้องการ I / O น้อยที่สุด สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการซ้อนลูปดูการทำความเข้าใจการซ้อนลูปซ้อน

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

การรวมแฮชสามารถประมวลผลอินพุตที่มีขนาดใหญ่ไม่เรียงลำดับและไม่มีการจัดทำดัชนีได้อย่างมีประสิทธิภาพ

แต่ฉันเชื่อว่าคุณควรเริ่มต้นด้วยหัวข้อพื้นฐานเพิ่มเติม: การปรับแต่งการค้นหาและสุดท้ายไปที่การใช้คำแนะนำการสืบค้น


5
ตกลงการใส่คำแนะนำการเข้าร่วมควรจะเป็นทางเลือกสุดท้ายเท่านั้น (บางครั้งมีประโยชน์หากข้อมูลโดยประมาณแตกต่างจากข้อมูลจริงอย่างมาก)
Andrew Bickerton
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.