-
Type: Improvement
-
Resolution: Unresolved
-
Priority: Major - P3
-
None
-
Affects Version/s: None
-
Component/s: Aggregation Framework
-
Query Execution
-
(copied to CRM)
The explain output of the $lookup stage doesn't show any information about the query that would be executed on the "from" collection. This can lead to confusion about whether or not $lookup is using an index when the document source cursor on the collection that the "aggregate" command was run on is performing a collection scan.
Original description
Lookup don't use indexes. Here is the test code:
db.goods.drop(); db.persons.drop(); db.goods_persons.drop(); db.goods.insert({'id': 1, 'name': 'good1'}); db.goods.insert({'id': 2, 'name': 'good2'}); db.persons.insert({'id': 1, 'name': 'john'}); db.persons.insert({'id': 2, 'name': 'tom'}); db.goods_persons.insert({'good': 1, 'person': 1}); db.goods_persons.insert({'good': 2, 'person': 1}); db.goods_persons.insert({'good': 1, 'person': 2}); //create all probably indexes db.goods.ensureIndex({'id':1}); db.persons.ensureIndex({'id':1}); db.goods_perons.ensureIndex({'good':1}); db.goods_perons.ensureIndex({'person':1}); db.goods.ensureIndex({'goods_persons.person':1}); db.goods.ensureIndex({'goods_persons.good':1}); //get buyers db.goods.aggregate( [ {$lookup:{ from: "goods_persons", localField: "id", foreignField: "good", as: "goods_persons" }}, {$match:{ "goods_persons.person": 1 }} ], {'explain': true}); //COLLSCAN - index not used
- is related to
-
SERVER-50246 $unionWith explain loses information from any stages in sub-pipeline which get absorbed into cursor stage
- Closed
- related to
-
COMPASS-7062 Query Performance Explain Summary for Aggregation Pipelines with $lookup is inaccurate with pre-SBE Execution Plans
- Open
-
SERVER-26789 Logging for $lookup less complete in 3.4 than 3.2
- Backlog
-
SERVER-53762 Report aggregate execution stats in explain for the inner side of $lookup
- Closed