Zgodnie z dokumentacją MongoDB, generalnie nie ma potrzeby rutynowego przebudowywania indeksów.
UWAGA :Wszelkie porady dotyczące przechowywania stają się bardziej interesujące dzięki MongoDB 3.0+, które wprowadziło wtykowy interfejs API silnika pamięci masowej . Moje komentarze poniżej odnoszą się w szczególności do domyślnego mechanizmu przechowywania MMAP w MongoDB 3.0 i wcześniejszych. WiredTiger i inne silniki pamięci masowej mają różne implementacje pamięci masowej dla danych i indeksów.
Odbudowanie indeksu za pomocą silnika pamięci masowej MMAP może przynieść pewne korzyści, jeśli:
-
Indeks zajmuje więcej miejsca niż oczekiwano w porównaniu z danymi. Uwaga:musisz monitorować dane historyczne i rozmiar indeksu, aby uzyskać punkt odniesienia do porównania.
-
Chcesz przeprowadzić migrację ze starszego formatu indeksu do nowszego. Jeśli wskazana jest reindeksacja, zostanie to wymienione w uwagach dotyczących aktualizacji. Na przykład MongoDB 2.0 wprowadził znaczące poprawę wydajności indeksowania dlatego informacje o wydaniu zawierają sugerowaną reindeksację do formatu v2.0 po aktualizacji. Podobnie MongoDB 2.6 wprowadził
2dsphere
(v2.0) indeksy które mają inne zachowanie domyślne (domyślnie rzadki). Istniejące indeksy nie są odbudowywane po uaktualnieniu wersji indeksu; wybór czy/kiedy uaktualnić należy do administratora bazy danych. -
Zmieniłeś
_id
format kolekcji do lub z monotonicznie rosnącego klucza (np. ObjectID) do wartości losowej. To trochę ezoteryczne, ale istnieje optymalizacja indeksu, która dzieli segmenty b-drzewa 90/10 (zamiast 50/50), jeśli wstawiasz_id
s, które zawsze rosną (ref:SERVER-983 ). Jeśli charakter Twojego_id
Jeśli zmieni się znacząco, możliwe jest zbudowanie wydajniejszego b-drzewa z ponownym indeksowaniem.
Aby uzyskać więcej informacji na temat ogólnego zachowania B-drzewa, zobacz:Wikipedia:B-drzewo
Wizualizacja wykorzystania indeksu
Jeśli naprawdę chcesz zagłębić się w wewnętrzne elementy indeksu, możesz wypróbować kilka eksperymentalnych poleceń/narzędzi. Spodziewam się, że są one ograniczone tylko do MongoDB 2.4 i 2.6: