Index usage verification in MongoDB - Time & Space Complexity
When we check if a database uses an index, we want to know how fast it finds data as the collection grows.
We ask: How does the search time change when more records are added?
Analyze the time complexity of the following code snippet.
// Check if query uses index
db.collection.find({ age: 30 }).explain("executionStats")
// Example output shows if index was used and how many documents scanned
This code runs a query on the "age" field and shows if MongoDB uses an index to speed up the search.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Scanning documents to find matches.
- How many times: Without index, it checks each document one by one; with index, it jumps directly to matches.
Explain the growth pattern intuitively.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 checks without index, few with index |
| 100 | 100 checks without index, few with index |
| 1000 | 1000 checks without index, few with index |
Pattern observation: Without index, operations grow directly with data size; with index, operations stay small even as data grows.
Time Complexity: O(log n)
This means using an index lets MongoDB find data much faster, growing slowly as data grows.
[X] Wrong: "Indexes always make queries instant, no matter what."
[OK] Correct: Some queries don't use indexes if fields aren't indexed or conditions don't match, so search can still scan many documents.
Understanding how indexes affect query speed shows you know how databases handle data efficiently, a key skill for real projects.
"What if we changed the query to search on a field without an index? How would the time complexity change?"
Practice
IXSCAN stage in MongoDB's explain('executionStats') output indicate?Solution
Step 1: Understand the meaning of IXSCAN
TheIXSCANstage means MongoDB is scanning an index to find matching documents.Step 2: Compare with other stages
If the query was scanning all documents, it would show aCOLLSCANstage instead.Final Answer:
The query is using an index to find documents. -> Option CQuick Check:
IXSCAN = index used [OK]
- Confusing IXSCAN with COLLSCAN
- Assuming IXSCAN means a full collection scan
- Thinking IXSCAN means query error
users?Solution
Step 1: Recall the correct syntax for explain
The correct syntax is to callexplain('executionStats')on the cursor returned byfind().Step 2: Check each option
db.users.find({age: 25}).explain('executionStats') correctly callsfind()thenexplain('executionStats'). db.users.explain('executionStats').find({age: 25}) calls explain before find, which is invalid. db.users.find({age: 25}).explain() calls explain without argument, which defaults to 'queryPlanner' not 'executionStats'. db.users.find().explain('stats') uses wrong argument 'stats'.Final Answer:
db.users.find({age: 25}).explain('executionStats') -> Option BQuick Check:
find().explain('executionStats') correct [OK]
- Calling explain before find()
- Using wrong explain argument
- Omitting parentheses on find()
{ username: 1 } exists, what will the explain('executionStats') output stage be for this query?db.users.find({username: 'alice'}).explain('executionStats')Solution
Step 1: Check if index matches query field
The query filters onusername, and an index on{ username: 1 }exists, so MongoDB can use this index.Step 2: Identify the explain stage for index use
When an index is used, the explain output showsIXSCANstage indicating index scan.Final Answer:
IXSCAN -> Option AQuick Check:
Index on username = IXSCAN [OK]
- Expecting COLLSCAN despite index presence
- Confusing FETCH with index scan
- Assuming SORT appears without sort query
db.orders.find({status: 'shipped'}).explain('executionStats') but see COLLSCAN instead of IXSCAN. What is the most likely cause?Solution
Step 1: Understand COLLSCAN meaning
COLLSCANmeans MongoDB scanned all documents because no suitable index was found.Step 2: Identify cause for no index use
If the query filters onstatusbut no index exists on that field, MongoDB must scan the whole collection.Final Answer:
There is no index on thestatusfield. -> Option DQuick Check:
COLLSCAN = no index on query field [OK]
- Assuming syntax error causes COLLSCAN
- Believing MongoDB can't index strings
- Thinking empty collection causes COLLSCAN
{ category: 1, price: -1 }. Which query will use this index efficiently according to explain('executionStats')?Solution
Step 1: Understand compound index usage
A compound index on{ category: 1, price: -1 }can be used efficiently if the query filters oncategoryfirst, then optionally onprice, and the sort matches the index order.Step 2: Analyze each query
db.products.find({category: 'books', price: 20}).sort({price: -1}) filters on bothcategoryandpricewith equality and sorts price descending, matching the index order, so it uses the index efficiently. db.products.find({price: {$lt: 20}}) filters only onprice, which is the second field, so index is not used efficiently. db.products.find({category: 'books'}).sort({price: 1}) sorts price ascending but index has price descending, so sort won't use index efficiently. db.products.find({category: 'books', price: {$lt: 20}}) filters on both but does not specify sort matching index order, so less efficient than A.Final Answer:
db.products.find({category: 'books', price: 20}).sort({price: -1}) -> Option AQuick Check:
Compound index needs prefix field filter and matching sort order [OK]
- Filtering only on second index field
- Ignoring sort direction in compound index
- Assuming any filter uses compound index fully
Ready to prove it?
Pass the test and this pattern moves unknown
