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().
0 Comments