Skenování kolekce ve vašem výstupu vysvětlení odkazuje na map_levels
kolekce, jak je uvedeno v queryPlanner.namespace
hodnota. $lookup
fáze sloučí data z jiné kolekce do aktuálního kanálu. Protože jste nezadali žádné fáze dotazu před $lookup
, map_levels
kolekce bude iterována pomocí skenování kolekce. Pokud se načítá celá kolekce bez jakýchkoli kritérií filtrování nebo řazení, má skenování kolekce menší režii než opakování indexu a načítání dokumentů.
Skenování aktuální sbírky se můžete vyhnout přidáním $match
fázi před vaším $lookup
(za předpokladu, že nechcete zpracovat úplné map_levels
kolekce).
Výstup vysvětlení dotazu bohužel neindikuje (jako v MongoDB 4.0) použití indexu pro $lookup
etapy. Řešením by bylo spuštění vysvětlení pomocí pipeline
vašeho vyhledávání jako agregační dotaz nejvyšší úrovně.
V nástroji pro sledování problémů MongoDB existuje relevantní problém, který je třeba sledovat/hlasovat:SERVER-22622:Improve $lookup vysvětlit, jak označit plán dotazů v kolekci „od“ .