MongoDB w pewien sposób łączy klucz złożony i używa go jako klucza w BTree.
Podczas znajdowania pojedynczych elementów - Kolejność węzłów w drzewie nie ma znaczenia.
Jeśli zwracasz zakres węzłów - Elementy znajdujące się blisko siebie będą spadać z tych samych gałęzi drzewa. Im bliżej węzły znajdują się w zasięgu, tym szybciej można je odzyskać.
Z indeksem pojedynczego pola - Kolejność nie będzie miała znaczenia. Jeśli są blisko siebie w porządku rosnącym, będą również blisko siebie w porządku malejącym.
Kiedy masz klucz złożony - Kolejność zaczyna mieć znaczenie.
Na przykład, jeśli kluczem jest A rosnąco B rosnąco, indeks może wyglądać mniej więcej tak:
Row A B 1 1 1 2 2 6 3 2 7 4 3 4 5 3 5 6 3 6 7 5 1
Zapytanie o A rosnąco B malejąco będzie musiało przeskakiwać po indeksie niewłaściwie, aby zwrócić wiersze i będzie wolniejsze. Na przykład zwróci wiersz 1, 3, 2, 6, 5, 4, 7
Zapytanie z zakresem w tej samej kolejności co indeks po prostu zwróci wiersze po kolei we właściwej kolejności.
Znalezienie rekordu w BTree zajmuje czas O(Log(n)). Znalezienie zakresu rekordów w kolejności to tylko OLog(n) + k, gdzie k jest liczbą rekordów do zwrócenia.
Jeśli rekordy są niesprawne, koszt może wynieść nawet OLog(n) * k