MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Warum spielt die Indexrichtung in MongoDB eine Rolle?

MongoDB verkettet den zusammengesetzten Schlüssel auf irgendeine Weise und verwendet ihn als Schlüssel in einem BTree.

Bei der Suche nach einzelnen Artikeln - Die Reihenfolge der Knoten im Baum ist irrelevant.

Wenn Sie eine Reihe von Knoten zurückgeben - Die Elemente, die nahe beieinander liegen, befinden sich an denselben Zweigen des Baums. Je näher die Knoten in der Reichweite sind, desto schneller können sie abgerufen werden.

Mit einem Einzelfeldindex - Die Reihenfolge spielt keine Rolle. Wenn sie in aufsteigender Reihenfolge dicht beieinander liegen, werden sie auch in absteigender Reihenfolge dicht beieinander liegen.

Wenn Sie einen zusammengesetzten Schlüssel haben - Die Reihenfolge spielt eine Rolle.

Wenn zum Beispiel der Schlüssel A aufsteigend B aufsteigend ist, könnte der Index etwa so aussehen:

Row   A B
1     1 1
2     2 6
3     2 7 
4     3 4
5     3 5
6     3 6
7     5 1

Eine Abfrage für A aufsteigend B absteigend muss um den Index herumspringen, um die Zeilen zurückzugeben, und ist langsamer. Beispielsweise wird Zeile 1, 3, 2, 6, 5, 4, 7 zurückgegeben

Eine Bereichsabfrage in derselben Reihenfolge wie der Index gibt die Zeilen einfach nacheinander in der richtigen Reihenfolge zurück.

Das Finden eines Datensatzes in einem BTree dauert O(Log(n)) Zeit. Das Finden einer Reihe von Datensätzen in der Reihenfolge ist nur OLog(n) + k, wobei k die Anzahl der zurückzugebenden Datensätze ist.

Wenn die Datensätze nicht in Ordnung sind, können die Kosten bis zu OLog(n) * k

betragen