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

Was ist der richtige Weg zum Indizieren in MongoDB, wenn eine große Kombination von Feldern vorhanden ist

Im Allgemeinen sind Indizes nur sinnvoll, wenn sie über einem selektiven Wert liegen Feld. Das bedeutet, dass die Anzahl der Dokumente, die einen bestimmten Wert haben, gering ist relativ zur Gesamtzahl der Dokumente.

Was „klein“ bedeutet, variiert je nach Datensatz und Abfrage. Eine Selektivität von 1 % ist ziemlich sicher bei der Entscheidung, ob ein Index sinnvoll ist. Wenn ein bestimmter Wert beispielsweise in 10 % der Dokumente vorhanden ist, kann es effizienter sein, einen Tabellenscan durchzuführen, als einen Index für das entsprechende Feld zu verwenden.

In Anbetracht dessen sind einige Ihrer Felder selektiv und einige werden es nicht sein. Ich vermute zum Beispiel, dass das Filtern nach "OK" nicht sehr selektiv sein wird. Sie können nicht-selektive Felder aus Indizierungsüberlegungen eliminieren - wenn jemand alle Bestellungen haben möchte, die ohne andere Bedingungen "OK" sind, führt er am Ende einen Tabellenscan durch. Wenn jemand Bestellungen haben möchte, die "OK" sind und andere Bedingungen haben, wird jeder Index verwendet, der auf andere Bedingungen anwendbar ist.

Da Sie nun mit selektiven (oder zumindest etwas selektiven) Feldern zurückbleiben, überlegen Sie, welche Abfragen sowohl beliebt als auch selektiv sind. Beispielsweise wäre vielleicht Marke+Typ eine solche Kombination. Sie könnten zusammengesetzte Indizes hinzufügen, die häufigen Suchanfragen entsprechen, von denen Sie erwarten, dass sie selektiv sind.

Was passiert nun, wenn jemand nur nach Marke filtert? Dies kann abhängig von den Daten selektiv sein oder nicht. Wenn Sie bereits einen zusammengesetzten Index für Marke+Typ haben, überlassen Sie es der Datenbank zu bestimmen, ob eine reine Markenabfrage effizienter über den Marke+Typ-Index oder über einen Sammlungsscan zu erfüllen ist.

Fahren Sie auf diese Weise mit anderen beliebten Abfragen und Feldern fort.