Complete Guide to MongoDB Indexing for High-Performance Queries
7/28/2025
MongoDB is a powerful NoSQL database, but performance can drastically suffer without proper indexing. In this guide, we’ll explore how to use indexes in MongoDB to improve query speed, optimize reads, and maintain application scalability. Whether you're building a production app or optimizing an existing database, these strategies will help you get the most out of your MongoDB setup.
Table of Contents
1. What is Indexing in MongoDB?
2. Single Field Index
3. Compound Index
4. TTL Index (Time-To-Live)
5. Partial Index
6. Using Explain Plans
7. Best Practices and Real-World Scenarios
8. Conclusion
1. What is Indexing in MongoDB?
Indexes support the efficient execution of queries in MongoDB. Without indexes, MongoDB must perform a collection scan, i.e., scan every document in a collection to select those documents that match the query statement.
2. Single Field Index
The most basic type of index is a single field index. It's created on a single field to improve performance for queries filtering or sorting on that field.
Example:
db.users.createIndex({ age: 1 })
3. Compound Index
Compound indexes are created on multiple fields. They're useful when queries filter or sort on multiple fields in the index order.
Example:
db.orders.createIndex({ userId: 1, createdAt: -1 })
4. TTL Index (Time-To-Live)
TTL indexes automatically remove documents after a certain time. Useful for sessions, temporary logs, etc.
Example:
db.sessions.createIndex({ "createdAt": 1 }, { expireAfterSeconds: 3600 })
5. Partial Index
Partial indexes index only the documents that meet a specified filter expression. They reduce index size and improve write performance.
Example:
db.users.createIndex({ email: 1 }, { partialFilterExpression: { email: { $exists: true } } })
6. Using Explain Plans
MongoDB's explain plans show how queries are executed. Use them to diagnose slow queries and ensure indexes are used.
Example:
db.users.find({ age: 30 }).explain('executionStats')
7. Best Practices and Real-World Scenarios
- Always create indexes based on your query
patterns.
- Use compound indexes over multiple single indexes.
- Monitor performance using explain plans.
- Be cautious with write-heavy workloads; indexes can impact write speed.
- Periodically review and drop unused indexes using db.collection.getIndexes().