MongoDB sammanfogar den sammansatta nyckeln på något sätt och använder den som nyckeln i ett BTree.
När du hittar enstaka föremål – Ordningen på noderna i trädet är irrelevant.
Om du returnerar en rad noder – Elementen nära varandra kommer att vara nere i samma grenar på trädet. Ju närmare noderna är i området desto snabbare kan de hämtas.
Med ett enda fältindex - Ordern spelar ingen roll. Om de ligger nära varandra i stigande ordning kommer de också att ligga nära varandra i fallande ordning.
När du har en sammansatt nyckel - Ordningen börjar spela roll.
Till exempel, om nyckeln är A stigande B stigande kan indexet se ut ungefär så här:
Row A B 1 1 1 2 2 6 3 2 7 4 3 4 5 3 5 6 3 6 7 5 1
En fråga för A stigande B fallande kommer att behöva hoppa runt indexet för att returnera raderna och kommer att vara långsammare. Till exempel kommer den att returnera rad 1, 3, 2, 6, 5, 4, 7
En intervallfråga i samma ordning som indexet returnerar helt enkelt raderna sekventiellt i rätt ordning.
Att hitta en post i ett BTree tar O(Log(n)) tid. Att hitta ett intervall av poster i ordning är bara OLog(n) + k där k är antalet poster som ska returneras.
Om posterna är ur funktion kan kostnaden bli så hög som OLog(n) * k