Cho trường đó key
được lập chỉ mục trong cả hai trường hợp, chính tìm kiếm chỉ mục độ phức tạp sẽ rất giống nhau. Là giá trị của a
sẽ là băm
và được lưu trữ trong cây chỉ mục.
Nếu chúng tôi đang tìm kiếm chi phí hiệu suất tổng thể, thì phiên bản băm sẽ phải chịu thêm chi phí băm (không đáng kể) cho giá trị của a
trước khi khớp với giá trị trong cây chỉ mục. Xem thêm mongo / db / index /hash_access_method.h
Ngoài ra, chỉ mục được băm sẽ không thể sử dụng nén tiền tố chỉ mục ( WiredTiger) . Nén tiền tố chỉ mục đặc biệt hiệu quả đối với một số tập dữ liệu, như những tập dữ liệu có số lượng thấp (ví dụ:quốc gia) hoặc những tập hợp có giá trị lặp lại, như số điện thoại, mã an sinh xã hội và tọa độ địa lý. Nó đặc biệt hiệu quả đối với chỉ mục kết hợp , trong đó trường đầu tiên được lặp lại với tất cả các giá trị duy nhất của trường thứ hai.
Nói chung, không có lý do gì để băm một giá trị không thuộc phạm vi. Để chọn khóa phân đoạn, hãy xem xét cardinality , tần suất và tỷ lệ thay đổi của giá trị.
Chỉ mục băm thường được sử dụng cho một trường hợp cụ thể của sharding . Khi một khóa phân đoạn giá trị là tăng / giảm đơn điệu giá trị, việc phân phối dữ liệu có thể chỉ đi vào một phân đoạn. Đây là nơi mà khóa phân đoạn được băm sẽ có thể cải thiện việc phân phối các lần ghi. Đó là một sự đánh đổi nhỏ để cải thiện đáng kể cụm sharding của bạn. Xem thêm Hashed so với Ranged Sharding .
Nó có giá trị hay không, tùy thuộc vào từng trường hợp sử dụng. Giá trị băm tùy chỉnh có nghĩa là bất kỳ truy vấn nào cho giá trị băm sẽ phải trải qua mã băm tùy chỉnh, tức là ứng dụng.
Ưu điểm của việc sử dụng hàm băm tích hợp là MongoDB tự động tính toán các hàm băm khi giải quyết các truy vấn bằng cách sử dụng các chỉ mục được băm. Do đó, các ứng dụng không cần phải tính toán hàm băm.