Je hebt geen index die Mongo daar automatisch voor gebruikt, dus het voert een volledige tabelscan uit.
Zoals vermeld in de documenten
Waarom
Als je een index hebt op a,b - en je zoekt op a
alleen - er wordt automatisch een index gebruikt. Dit komt omdat het het begin van de index is (wat snel te doen is), de db kan de rest van de indexwaarde gewoon negeren.
Een index op a,b is inefficiënt bij het zoeken op b
alleen omdat het niet de mogelijkheid biedt om de index te gebruiken om te zoeken met "starts with thisfixedstring".
Dus ofwel:
- Voeg _reference_1_id toe aan de zoekopdracht (waarschijnlijk niet relevant)
- OF voeg een index toe aan _reference_2_id (als u vaak in het veld zoekt)
- OF gebruik een hint
Hint
Waarschijnlijk uw goedkoopste optie op dit moment.
Voeg een vraaghint toe om af te dwingen uw _reference_1_id_1__reference_2_id_1_id_1
inhoudsopgave. Dat is waarschijnlijk een stuk sneller dan een volledige tabelscan, maar nog steeds een stuk langzamer dan een index die begint met het veld dat u in de query gebruikt.
d.w.z.
db.mycoll
.find({"_reference_2_id" : ObjectId("jkl7890123456")})
.hint("_reference_1_id_1__reference_2_id_1_id_1");