MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Dlaczego kierunek indeksu ma znaczenie w MongoDB?

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



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Porównanie mangusty _id i strings

  2. MongoDB $podłoga

  3. 3 sposoby na zwracanie odrębnych wartości w MongoDB

  4. MongoDB $ceil

  5. Jaki jest właściwy sposób tworzenia synchronicznego zapytania MongoDB w Node.js?