Sự khác biệt giữa lập chỉ mục btree và rtree là gì?


36

Tôi đã nhận thấy trên MySQLWorkbench rằng bạn có thể chọn cách lưu trữ các chỉ mục của mình trước khi chuyển tiếp thiết kế của bạn. Các loại lưu trữ là:

  1. BTREE
  2. RTREE
  3. HASH

Nghiên cứu điều này, tôi đã tìm thấy một số thông tin khá nhiều trong đầu, vì vậy tôi đang tìm kiếm thông tin thực tế về sự khác biệt giữa những điều này và / hoặc tại sao bạn nên chọn cái này hơn cái khác.

Ngoài ra, tôi chưa bao giờ chọn loại lưu trữ trước đây, vì vậy tôi cho rằng MySQL đang chọn loại lưu trữ mặc định (BTREE?)

Câu trả lời:


51

BTree

BTree (trên thực tế B * Tree) là một bản đồ khóa-giá trị được sắp xếp hiệu quả. Ý nghĩa:

  • được cung cấp khóa, chỉ số BTree có thể nhanh chóng tìm thấy bản ghi,
  • một BTree có thể được quét theo thứ tự.
  • cũng dễ dàng tìm nạp tất cả các khóa (và bản ghi) trong một phạm vi.

ví dụ: "tất cả các sự kiện từ 9 giờ sáng đến 5 giờ chiều", "tên cuối cùng bắt đầu bằng 'R'"

RTree

RTree spatial indexcó nghĩa là nó có thể nhanh chóng xác định closecác giá trị ở 2 chiều trở lên. Nó được sử dụng trong cơ sở dữ liệu địa lý cho các truy vấn như:

tất cả các điểm trong X mét từ (x, y)

Băm

Hash là một bản đồ khóa-giá trị không có thứ tự. Nó thậm chí còn hiệu quả hơn một BTree: O(1)thay vì O(log n).

Nhưng nó không có bất kỳ khái niệm nào về trật tự nên không thể sử dụng nó cho các hoạt động sắp xếp hoặc tìm nạp các phạm vi.

Như một lưu ý phụ, ban đầu, MySQL chỉ cho phép các chỉ mục Hash trên MEMORYcác bảng; nhưng tôi không chắc điều đó đã được thay đổi trong những năm qua.


MySQL có hỗ trợ Rtrees không?
Pacerier

2
vâng, chúng được gọi là INDEX SPATIAL ( dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html )
Javier

Thật tuyệt, cảm ơn =) Có cấu trúc nào khác ngoài 3 cấu trúc này, hoặc các cấu trúc được lên kế hoạch trong tương lai gần không?
Pacerier

Bảng bộ nhớ hỗ trợ chỉ số btree cũng
Amareswar

@Amareswar, đúng rồi. Có thể câu trả lời của tôi có thể được đọc theo cả hai cách, nhưng điều tôi muốn nói là các chỉ mục HASH chỉ được phép trên các bảng NHỚ chứ không phải trên các bảng 'bình thường'.
Javier
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.