MongoDB concatena in qualche modo la chiave composta e la usa come chiave in un BTree.
Quando si trovano singoli articoli - L'ordine dei nodi nell'albero è irrilevante.
Se stai restituendo un intervallo di nodi - Gli elementi vicini tra loro saranno lungo gli stessi rami dell'albero. Più vicini sono i nodi nell'intervallo, più velocemente possono essere recuperati.
Con un indice di campo singolo - L'ordine non ha importanza. Se sono ravvicinati in ordine crescente, lo saranno anche in ordine decrescente.
Quando hai una chiave composta - L'ordine inizia ad avere importanza.
Ad esempio, se la chiave è A ascendente B ascendente, l'indice potrebbe essere simile a questo:
Row A B 1 1 1 2 2 6 3 2 7 4 3 4 5 3 5 6 3 6 7 5 1
Una query per A ascendente B discendente dovrà saltare intorno all'indice fuori ordine per restituire le righe e sarà più lenta. Ad esempio restituirà Riga 1, 3, 2, 6, 5, 4, 7
Una query con intervallo nello stesso ordine dell'indice restituirà semplicemente le righe in sequenza nell'ordine corretto.
Trovare un record in un Btree richiede tempo O(Log(n)). Trovare un intervallo di record in ordine è solo OLog(n) + k dove k è il numero di record da restituire.
Se i record sono fuori servizio, il costo potrebbe arrivare fino a OLog(n) * k