When not to index in MongoDB - Time & Space Complexity
Indexes help find data faster in MongoDB. But sometimes, adding an index can slow things down.
We want to understand when indexing does not improve speed and might cost more time.
Analyze the time complexity of a query without an index on a large collection.
// Find documents where status is 'active'
db.users.find({ status: 'active' })
This query searches all documents for status 'active' without an index on the status field.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Scanning each document in the collection one by one.
- How many times: Once for every document in the collection.
The query checks every document to see if it matches. More documents mean more checks.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 checks |
| 100 | 100 checks |
| 1000 | 1000 checks |
Pattern observation: The number of operations grows directly with the number of documents.
Time Complexity: O(n)
This means the time to run the query grows in a straight line as the collection gets bigger.
[X] Wrong: "Adding an index always makes queries faster."
[OK] Correct: Indexes take time to update when data changes and use extra space. For small collections or rarely queried fields, indexes can slow down writes and use unnecessary resources.
Understanding when not to add an index shows you know how to balance speed and cost. This skill helps you design smart databases that work well in real life.
"What if we added an index on the status field? How would the time complexity of the query change?"
Practice
Solution
Step 1: Understand index impact on small collections
Indexes add overhead and use space, so on very small collections, queries are already fast without them.Step 2: Compare with other options
The other options describe good reasons to create indexes: frequent filtering, large collections, and fields with many unique values used in sorting.Final Answer:
The collection is very small and queries are fast without indexes. -> Option AQuick Check:
Small collections often don't need indexes [OK]
- Thinking all collections always need indexes
- Ignoring index overhead on small data
- Confusing frequent query fields with rare ones
email field of the users collection?Solution
Step 1: Recall MongoDB index creation syntax
The correct method iscreateIndexwith a document specifying field and order (1 for ascending).Step 2: Check each option
db.users.createIndex({email: 1})matches the correct syntax. The distractors use wrong method names or formats:create_index(email)(incorrect casing, underscore, and argument style),index({email: 'asc'})(non-existent method),addIndex('email')(wrong method).Final Answer:
db.users.createIndex({email: 1}) -> Option BQuick Check:
Use createIndex({field: 1}) syntax [OK]
- Using wrong method names like create_index
- Passing field name as string instead of object
- Confusing ascending with string 'asc'
logs with a field status that has only two values: 'success' or 'fail', what is the likely effect of creating an index on status?Solution
Step 1: Understand low cardinality fields and indexing
Fields with few distinct values (low cardinality) like 'success'/'fail' do not benefit much from indexes because many documents share the same value.Step 2: Analyze options
Claims of much faster queries overestimate benefits for low cardinality. No errors occur from low cardinality indexes. Automatic data compression does not happen. The index uses extra space with no significant speedup.Final Answer:
The index will use extra space but provide no significant speedup. -> Option AQuick Check:
Low cardinality fields rarely benefit from indexes [OK]
- Assuming all indexes speed up queries
- Believing low cardinality causes errors
- Thinking indexes compress data automatically
category field of a MongoDB collection, but queries filtering by category are still slow. What is a likely cause?Solution
Step 1: Consider index usefulness on low distinct values
Ifcategoryhas few unique values, the index won't help much because many documents share the same value.Step 2: Evaluate other options
Wrong field name syntax is unlikely if the index exists; MongoDB supports indexing on string fields; empty collections have no data to slow down queries.Final Answer:
The category field has very few distinct values causing low index efficiency. -> Option CQuick Check:
Low distinct values reduce index speedup [OK]
- Assuming all indexes always speed queries
- Believing MongoDB can't index strings
- Thinking empty collections cause index failure
orders with 100 documents. The status field has values 'pending', 'shipped', 'delivered'. You want to optimize queries filtering by status. What is the best indexing strategy?Solution
Step 1: Analyze collection size and field cardinality
The collection is very small (100 documents), andstatushas only three distinct values, so indexing will add overhead without much benefit.Step 2: Evaluate indexing options
Create a single-field index onstatusto speed up queries. creates an index but likely unnecessary here. Create a compound index onstatusandorderDateeven iforderDateis rarely queried. adds complexity with rarely used field. Create multiple indexes on each possiblestatusvalue separately. is invalid as MongoDB does not create separate indexes per value.Final Answer:
Do not create an index because the collection is small and status has few distinct values. -> Option DQuick Check:
Small collections and low cardinality fields often don't need indexes [OK]
- Creating unnecessary indexes on small data
- Misunderstanding compound index benefits
- Trying to index each value separately
Ready to prove it?
Pass the test and this pattern moves unknown
