Dlaczego indeksy
Zrozum dwa kluczowe punkty.
- Chociaż indeks jest lepszy niż brak indeksu, poprawny indeks jest znacznie lepszy niż jeden z nich.
- MongoDB użyje tylko jednego indeksu na zapytanie, tworząc indeksy złożone z odpowiednim porządkiem pól, które prawdopodobnie chcesz użyć.
Indeksy nie są darmowe. Zabierają pamięć i nakładają spadek wydajności podczas wstawiania, aktualizacji i usuwania. Zwykle wpływ na wydajność jest pomijalny (zwłaszcza w porównaniu ze wzrostem wydajności odczytu), ale to nie znaczy, że nie możemy sprytnie tworzyć naszych indeksów.
Jak Indexes
Określenie, która grupa pól powinna być razem indeksowana, polega na zrozumieniu wykonywanych zapytań. Kolejność pól używanych do tworzenia indeksu ma kluczowe znaczenie. Dobra wiadomość jest taka, że jeśli pomylisz się w zamówieniu, indeks nie będzie w ogóle używany, więc łatwo będzie go znaleźć za pomocą wyjaśnienia.
Dlaczego sortowanie
Twoje zapytania mogą wymagać sortowania. Ale sortowanie może być kosztowną operacją, dlatego ważne jest, aby traktować pola, według których sortujesz, tak jak pole, którego dotyczy zapytanie. Więc będzie szybciej, jeśli ma index. Jest jednak jedna ważna różnica, sortowane pole musi być ostatnim polem w indeksie. Jedynym wyjątkiem od tej reguły jest to, że jeśli pole jest również częścią zapytania, reguła musi być ostatnią nie ma zastosowania.
Jak sortować
Możesz określić sortowanie dla wszystkich kluczy indeksu lub podzbioru; jednak klucze sortowania muszą być wymienione w tej samej kolejności, w jakiej pojawiają się w indeksie. Na przykład wzorzec klucza indeksu {a: 1, b: 1} może obsługiwać sortowanie na {a: 1, b: 1}, ale nie na {b: 1, a: 1}.
Sortowanie musi określać ten sam kierunek sortowania (tj. Rosnąco / malejąco) dla wszystkich swoich kluczy co wzorzec klucza indeksu lub określać odwrotny kierunek sortowania dla wszystkich swoich kluczy jako wzorzec klucza indeksu. Na przykład wzorzec klucza indeksu {a: 1, b: 1} może obsługiwać sortowanie na {a: 1, b: 1} i {a: -1, b: -1}, ale nie na {a: -1 , b: 1}.
Załóżmy, że istnieją te indeksy:
{ a: 1 }
{ a: 1, b: 1 }
{ a: 1, b: 1, c: 1 }
Example Index Used
db.data.find().sort( { a: 1 } ) { a: 1 }
db.data.find().sort( { a: -1 } ) { a: 1 }
db.data.find().sort( { a: 1, b: 1 } ) { a: 1, b: 1 }
db.data.find().sort( { a: -1, b: -1 } ) { a: 1, b: 1 }
db.data.find().sort( { a: 1, b: 1, c: 1 } ) { a: 1, b: 1, c: 1 }
db.data.find( { a: { $gt: 4 } } ).sort( { a: 1, b: 1 } ) { a: 1, b: 1 }
1, 3, 2, 6, 5, 4, 7
?