Ich versuche, das erste Beispiel einer Indexkreuzungsanweisung ( Ссылка ) zu reproduzieren, aber mit einer Problem: Mongo verwendet nicht beide Indizes
Meine Schritte:
Indizes hinzufügen:
%Vor%Abfrage überprüfen erklären:
%Vor%Wie Sie sehen können, enthält der winingPlan nur den index item_1. Es gibt rejectedPlans, die den Index qty_1 enthalten. Aber es gibt keine Pläne, die Indexschnittstellen enthalten. Ich weiß, dass es viele Bedingungen gibt, um einen bestimmten Index auszuwählen. Aber in meinem Fall plant Mongo es nicht einmal!
Könnte mir jemand helfen?
Es gibt einige Details zur Indexauswahl im SERVER-3071 JIRA-Problem , aber ich kann nicht sagen, ob alles noch relevant für 3.0 ist. Jedenfalls:
MongoDB 3.0.2 scheint die Indexinteraktion für die Abfrage range nicht zu berücksichtigen. Aber es wird für Punkt-Intervalle:
%Vor%Wir betreiben eine Multi-Tenant-Site. So gibt es eine Mongo-Sammlung, die Informationen über alle Kunden enthält, zum Beispiel
%Vor%Nachdem wir über die Indexüberschneidung erfahren hatten, haben wir versucht, mehrere einzelne Feldindizes zu erstellen, um Abfragen mit verschiedenen Suchkriterien mit variablen Feldern wie
zu unterstützen %Vor%Aber es stellte sich einfach heraus, dass kein Schnittpunkt vorlag, indem wir von "db.collection.explain" lernten. Da die Felder begrenzt sind, haben wir uns schließlich für eine Lösung entschieden, um einen zusammengesetzten Index zu erstellen, der alle Felder enthält.
%Vor%Und dann stellte sich heraus, dass unter allen Abfragen der "große" Compound-Index verwendet wird, soweit sich "customerId" in der Abfrage befindet.
%Vor%Tags und Links indexing mongodb mongodb-indexes database-indexes