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

indeksy mongodb obejmujące brakujące wartości

Istnieją dwie istotne cechy indeksu, które umożliwiają szybkie wyszukiwanie (w porównaniu z wykonywaniem skanowania kolekcji):

  • Kolejność wartości
  • Zwartość indeksowanych wartości

Jeśli masz wartości a i b , możesz powiedzieć, że a występuje przed b , leksykograficznie. Jeśli masz dokumenty {a: 2, b: 5} i {b: 4, a: 3} , nie ma jednej kolejności tych dokumentów, która odpowiadałaby typowym zapytaniom. Na przykład, jeśli chcesz, aby wszystkie a wartości uporządkowane wtedy możesz oczekiwać 2, 3 , ale jeśli chcesz b wartości, których możesz się spodziewać 4, 5 - wymaganie odwrócenia kolejności dokumentów.

Gdy baza danych przechowuje indeks na dysku, wartości są przechowywane w kolejności indeksów (cokolwiek to może być dla danego indeksu, np. ma na to wpływ sortowanie). Ogólnie rzecz biorąc, nie ma jednego zamówienia, które można by wykorzystać dla wszystkich dokumentów inkasowych, dlatego dokumenty inkasowe są nieuporządkowane.

Kiedy wykonujesz zapytanie według indeksu, bierzesz przeszukiwaną wartość i zasadniczo wykonujesz wyszukiwanie binarne przy użyciu indeksu, ponieważ dane w indeksie są sortowane.

Drugim powodem używania indeksu jest to, że jeśli skanujesz kolekcję, dla każdego dokumentu, cały dokument zazwyczaj musi zostać pobrany z dysku i pominięty. Jeśli masz kolekcję 100 GB i wykonujesz skanowanie, być może będziesz musiał pominąć ponad 100 GB danych. Jeśli ta sama kolekcja ma indeks 100 MB w jakimś polu (ponieważ indeks przechowuje tylko wartości w tym polu, a nie całą wartość danych dokumentu), a baza danych wykonuje pełne skanowanie indeksu, musi przebyć tylko 100 MB dane.

A teraz pytanie o przechowywanie braku wartości w indeksie.

Z punktu widzenia indeksu „brak wartości” w różnych dokumentach jest tą samą wartością. Tracisz możliwość wyszukiwania binarnego, gdy wszystkie twoje wartości są identyczne. Więc jeśli szukasz dokumentu „braku wartości”, indeks zwróci ci wszystkie dokumenty w kolekcji, które nie mają tej wartości, a następnie i tak musisz je przeskanować, aby przefiltrować je według wszelkich innych warunków mieć. Ponieważ generalnie powoduje to złą selektywność, bazy danych nie zawracają sobie głowy indeksami i w pierwszej kolejności przeprowadzają skanowanie kolekcji.

I najprawdopodobniej chcesz usunąć z zapytania inne pola, a nie pole, które nie ma wartości. Więc teraz chcesz, aby indeks przechowywał kompletne dokumenty, pomijając ideę zwartości.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Aktualizacja mongodb nie ma żadnego efektu i nadal wyświetla starą wersję

  2. Uruchamianie kompasu MongoDB na komputerze Mac

  3. Jak używać dynamicznej nazwy zmiennej w JavaScript bez eval do aktualizacji MongoDB?

  4. Trwałość zatwierdzenia i dysku w NoSQL(MongoDB)

  5. mongodb $istnieje zawsze zwraca 0