ความแตกต่างระหว่างการจัดทำดัชนี btree และ rtree คืออะไร?


36

ฉันสังเกตเห็นใน MySQLWorkbench ว่าคุณสามารถเลือกวิธีการจัดเก็บดัชนีของคุณก่อนส่งต่อการออกแบบของคุณ ประเภทการจัดเก็บคือ:

  1. bTree
  2. RTree
  3. กัญชา

จากการค้นคว้านี้ฉันพบข้อมูลบางอย่างที่อยู่เหนือหัวฉันดังนั้นฉันจึงมองหาข้อมูลที่เป็นประโยชน์เกี่ยวกับความแตกต่างระหว่างสิ่งเหล่านี้และ / หรือสาเหตุที่คุณควรเลือกอย่างใดอย่างหนึ่ง

นอกจากนี้ฉันไม่เคยเลือกประเภทการจัดเก็บมาก่อนดังนั้นฉันคิดว่า MySQL กำลังเลือกประเภทการจัดเก็บเริ่มต้น (BTREE?)

คำตอบ:


51

BTree

BTree (ในความเป็นจริง B * Tree) เป็นแผนที่คีย์ค่าที่มีประสิทธิภาพ ความหมาย:

  • ให้คีย์, ดัชนี BTree สามารถค้นหาระเบียนได้อย่างรวดเร็ว
  • BTree สามารถสแกนตามลำดับ
  • นอกจากนี้ยังง่ายต่อการดึงกุญแจทั้งหมด (และบันทึก) ภายในช่วง

เช่น "เหตุการณ์ทั้งหมดระหว่าง 9.00 น. ถึง 17.00 น.", "นามสกุลที่ขึ้นต้นด้วย 'R'"

RTree

RTree spatial indexหมายถึงว่ามันสามารถระบุcloseค่าใน 2 มิติหรือมากกว่าอย่างรวดเร็ว มันถูกใช้ในฐานข้อมูลทางภูมิศาสตร์สำหรับการสืบค้นเช่น:

ทุกจุดภายใน X เมตรจาก (x, y)

กัญชา

Hash เป็นแผนที่คีย์ - ค่าที่ไม่เรียงลำดับ ก็จะยิ่งมีประสิทธิภาพมากขึ้นกว่า BTree: แทนO(1)O(log n)

แต่มันไม่มีแนวคิดเกี่ยวกับการสั่งซื้อดังนั้นจึงไม่สามารถใช้สำหรับการดำเนินการเรียงลำดับหรือดึงข้อมูลช่วง

ในฐานะที่เป็นข้อความด้านข้างเดิม แต่เดิม MySQL อนุญาตให้ใช้ดัชนีแฮชบนMEMORYตารางเท่านั้น แต่ฉันไม่แน่ใจว่ามีการเปลี่ยนแปลงในช่วงหลายปีที่ผ่านมา


MySQL รองรับ Rtrees หรือไม่?
Pacerier

2
ใช่พวกเขาถูกเรียกว่าSPATIAL INDEX ( dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html )
Javier

เจ๋งขอบคุณ =) มีสิ่งก่อสร้างอื่นนอกเหนือจาก 3 สิ่งนี้หรือสิ่งก่อสร้างที่วางแผนไว้ในอนาคตอันใกล้นี้หรือไม่?
Pacerier

ตารางหน่วยความจำรองรับดัชนี btree ด้วย
Amareswar

@ Amareswar ถูกต้อง บางทีคำตอบของฉันสามารถอ่านได้ทั้งสองวิธี แต่สิ่งที่ฉันหมายถึงคือดัชนีแฮชได้รับอนุญาตเฉพาะในตาราง MEMORY ไม่ใช่ในตาราง 'ปกติ'
Javier
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.