MongoDB索引怎样创建更有效
创建高效MongoDB索引需遵循以下原则并配合实用策略:
- 精准匹配查询模式
- 单字段高频查询用单字段索引,如
db.collection.createIndex({ field: 1 })
。 - 多字段组合查询用复合索引,字段顺序遵循“最左前缀原则”,将高频筛选字段放前面,排序字段放最后,如
db.collection.createIndex({ user_id: 1, create_time: -1 })
。
- 单字段高频查询用单字段索引,如
- 优化索引结构
- 覆盖索引:查询字段全部包含在索引中,避免回表查询,如
db.collection.createIndex({ name: 1, age: 1 })
用于find({ name: "Alice" }, { _id: 0, name: 1, age: 1 })
。 - 部分索引:通过
partialFilterExpression
仅索引满足条件的数据,减少索引体积,如db.products.createIndex({ price: 1 }, { partialFilterExpression: { price: { $gt: 0 } } })
。
- 覆盖索引:查询字段全部包含在索引中,避免回表查询,如
- 避免冗余与低效索引
- 删除未使用的索引,通过
db.collection.getIndexes()
查看并清理。 - 避免在低选择性字段(如布尔值、枚举值)上建索引。
- 删除未使用的索引,通过
- 性能调优技巧
- 使用
explain("executionStats")
分析查询是否命中索引,优化执行计划。 - 定期重建索引以减少碎片,
db.collection.reIndex()
。 - 对大集合考虑分片,分散索引负载。
- 使用
- 特殊场景索引
- 地理空间查询用地理空间索引(2d/2dsphere),支持
near
等操作。 - 全文搜索用文本索引,支持
$text
操作符。 - 保证唯一性用唯一索引,如
db.users.createIndex({ email: 1 }, { unique: true })
。
- 地理空间查询用地理空间索引(2d/2dsphere),支持
通过以上策略,可显著提升MongoDB查询效率,降低资源消耗。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权请联系我们,一经查实立即删除!