Explain plan analysis (queryPlanner, executionStats) in MongoDB - Time & Space Complexity
When we run a query in MongoDB, it does many steps to find the data.
We want to know how the work grows as the data gets bigger.
Analyze the time complexity of the explain plan for a find query.
db.collection.find({ age: { $gt: 25 } }).explain("executionStats")
This command shows how MongoDB plans and runs the query to find documents where age is greater than 25.
Look at the main repeated work MongoDB does to answer the query.
- Primary operation: Scanning documents or index entries to check the age condition.
- How many times: Once for each document or index entry it examines.
As the number of documents grows, MongoDB checks more entries.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 checks |
| 100 | About 100 checks |
| 1000 | About 1000 checks |
Pattern observation: The work grows roughly in direct proportion to the number of documents checked.
Time Complexity: O(n)
This means the time to run the query grows linearly with the number of documents MongoDB must examine.
[X] Wrong: "Explain plans always show constant time queries."
[OK] Correct: Explain plans show how much work depends on data size; many queries scan many documents, so time grows with data.
Understanding explain plans helps you see how queries work behind the scenes and how their cost changes with data size.
"What if we add an index on the age field? How would the time complexity shown in the explain plan change?"
Practice
queryPlanner section in MongoDB's explain output show?Solution
Step 1: Understand the role of
ThequeryPlannerqueryPlannershows the strategy MongoDB picks to run the query, like which indexes it uses.Step 2: Differentiate from
executionStatsexecutionStatsshows runtime details, not the plan itself.Final Answer:
The plan MongoDB chooses to execute the query -> Option AQuick Check:
queryPlanner = plan chosen [OK]
- Confusing queryPlanner with executionStats
- Thinking queryPlanner shows query results
- Assuming queryPlanner shows errors
Solution
Step 1: Recall the correct explain verbosity
MongoDB uses'executionStats'to show runtime details.Step 2: Check option syntax
Only db.collection.find({}).explain('executionStats') uses the correct string'executionStats'withexplain().Final Answer:
db.collection.find({}).explain('executionStats') -> Option DQuick Check:
Use 'executionStats' for runtime info [OK]
- Using wrong strings like 'queryPlan' or 'runStats'
- Forgetting quotes around verbosity string
- Confusing method chaining order
{
"executionStats": {
"nReturned": 5,
"totalDocsExamined": 100,
"executionTimeMillis": 12
}
}What does
totalDocsExamined tell you?Solution
Step 1: Understand
This value shows how many documents MongoDB looked at to find matching results.totalDocsExaminedmeaningStep 2: Differentiate from
nReturnednReturnedis how many documents matched and were returned, not scanned.Final Answer:
Number of documents scanned to find matches -> Option BQuick Check:
totalDocsExamined = docs scanned [OK]
- Confusing scanned docs with returned docs
- Thinking it counts indexes used
- Assuming it is total collection size
db.users.find({age: 30}).explain('executionStat') but get an error. Which is the likely cause?Solution
Step 1: Check common explain errors
Misspelling the verbosity string causes errors because MongoDB expects exact strings.Step 2: Validate other options
Collection name and query syntax are valid; 'executionStats' is supported.Final Answer:
The verbosity string 'executionStats' is misspelled -> Option AQuick Check:
Correct spelling of verbosity string is required [OK]
- Misspelling 'executionStats' as 'executionStat'
- Assuming explain() doesn't support 'executionStats'
- Blaming query syntax without checking verbosity
totalDocsExamined: 1000 and nReturned: 2. What is the best next step?Solution
Step 1: Analyze the explain stats
HightotalDocsExaminedbut lownReturnedmeans many documents scanned unnecessarily.Step 2: Choose optimization strategy
Adding an index on query fields helps MongoDB scan fewer documents and improve speed.Final Answer:
Add an index on the query fields to reduce scanned documents -> Option CQuick Check:
Index reduces scanned docs, improves query [OK]
- Ignoring explain output and performance impact
- Increasing batch size without fixing scan issue
- Trying to return all documents unnecessarily
Ready to prove it?
Pass the test and this pattern moves unknown
