Apa perbedaan antara pengindeksan btree dan rtree?


36

Saya perhatikan di MySQLWorkbench bahwa Anda dapat memilih cara menyimpan indeks Anda sebelum meneruskan desain Anda. Jenis penyimpanannya adalah:

  1. BTREE
  2. RTREE
  3. HASH

Meneliti ini, saya menemukan beberapa informasi yang cukup banyak di kepala saya, jadi saya mencari informasi praktis tentang apa perbedaan antara ini dan / atau mengapa Anda harus memilih satu di antara yang lain.

Juga, saya belum pernah memilih jenis penyimpanan sebelumnya, jadi saya berasumsi MySQL memilih jenis penyimpanan default (BTREE?)

Jawaban:


51

BTree

BTree (sebenarnya B * Tree) adalah peta nilai kunci yang diurutkan secara efisien. Berarti:

  • diberikan kunci, indeks BTree dapat dengan cepat menemukan catatan,
  • sebuah BTree dapat dipindai secara berurutan.
  • juga mudah untuk mengambil semua kunci (dan catatan) dalam suatu rentang.

mis. "semua acara antara jam 9 pagi dan jam 5 sore", "nama belakang dimulai dengan 'R'"

RTree

RTree adalah spatial indexyang artinya dapat dengan cepat mengidentifikasi closenilai dalam 2 atau lebih dimensi. Ini digunakan dalam basis data geografis untuk kueri seperti:

semua titik dalam jarak X meter dari (x, y)

Hash

Hash adalah peta nilai kunci yang tidak berurutan. Ini bahkan lebih efisien daripada BTree: O(1)bukan O(log n).

Tetapi tidak memiliki konsep pesanan sehingga tidak dapat digunakan untuk operasi sortir atau untuk mengambil rentang.

Sebagai catatan, awalnya, MySQL hanya mengizinkan indeks Hash di atas MEMORYmeja; tapi saya tidak yakin apakah itu telah berubah selama bertahun-tahun.


Apakah MySQL mendukung Rtrees?
— Pacerier

2
ya, mereka disebut SPATIAL INDEX ( dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html )
— Javier

Keren, terima kasih =) Apakah ada struktur lain selain 3 ini, atau struktur yang direncanakan dalam waktu dekat?
— Pacerier

Tabel memori juga mendukung indeks btree
— Amareswar

@ Amareswar, benar. Mungkin jawaban saya dapat dibaca dua arah, tetapi yang saya maksudkan adalah bahwa indeks HASH hanya diperbolehkan pada tabel MEMORY, bukan pada tabel 'normal'.
— Javier
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.