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

mongodb - $lookup-Pipeline mit COLLSCAN anstelle von Index

Der Sammlungsscan in Ihrer EXPLAIN-Ausgabe bezieht sich auf die map_levels Sammlung, wie im queryPlanner.namespace angegeben Wert. Die $lookup stage führt Daten aus einer anderen Sammlung mit der aktuellen Pipeline zusammen. Da Sie vor dem $lookup keine Abfragephasen angegeben haben , die map_levels Die Sammlung wird mit einem Sammlungsscan wiederholt. Wenn eine ganze Sammlung ohne Filter- oder Sortierkriterien geladen wird, hat ein Sammlungs-Scan weniger Overhead als das Iterieren eines Indexes und das Abrufen der Dokumente.

Sie können den aktuellen Sammlungsscan vermeiden, indem Sie ein $match hinzufügen Stufe vor Ihrem $lookup (vorausgesetzt, Sie möchten nicht die vollständigen map_levels verarbeiten Sammlung).

Unglücklicherweise gibt die Abfrage-Explain-Ausgabe nicht (wie bei MongoDB 4.0) die Indexnutzung für $lookup an Stufen. Eine Problemumgehung hierfür wäre das Ausführen von EXPLAIN mithilfe der pipeline Ihrer Suche als Aggregationsabfrage der obersten Ebene.

Im MongoDB Issue Tracker gibt es ein relevantes Problem, das Sie beobachten/upvoten sollten:SERVER-22622:Improve $lookup Erklären Sie, wie Sie den Abfrageplan für die "From"-Sammlung angeben .