MongoDB nối khóa ghép theo một cách nào đó và sử dụng nó làm khóa trong một BTree.
Khi tìm các mục đơn lẻ - Thứ tự của các nút trong cây là không liên quan.
Nếu bạn đang trả về một loạt các nút - Các yếu tố gần nhau sẽ xuống cùng một cành của cây. Các nút càng gần trong phạm vi thì chúng có thể được truy xuất nhanh hơn.
Với một chỉ mục trường duy nhất - Thứ tự không thành vấn đề. Nếu chúng gần nhau theo thứ tự tăng dần thì chúng cũng sẽ gần nhau theo thứ tự giảm dần.
Khi bạn có khóa ghép - Thứ tự bắt đầu có vấn đề.
Ví dụ:nếu khóa là A tăng dần B tăng dần chỉ mục có thể trông giống như sau:
Row A B 1 1 1 2 2 6 3 2 7 4 3 4 5 3 5 6 3 6 7 5 1
Một truy vấn cho A tăng dần B giảm dần sẽ cần phải nhảy xung quanh chỉ mục theo thứ tự để trả về các hàng và sẽ chậm hơn. Ví dụ:nó sẽ trả về Hàng 1, 3, 2, 6, 5, 4, 7
Một truy vấn có phạm vi theo thứ tự giống như chỉ mục sẽ chỉ trả về các hàng một cách tuần tự theo đúng thứ tự.
Tìm một bản ghi trong một BTree mất O (Log (n)) thời gian. Việc tìm một dải bản ghi theo thứ tự chỉ là OLog (n) + k trong đó k là số bản ghi cần trả về.
Nếu hồ sơ không theo thứ tự, chi phí có thể cao như OLog (n) * k