MongoDB索引疑问:唯一值查询优化及多条件更新的索引选择
MongoDB索引问题解答
关于email唯一索引的确认
针对你创建的索引语句 collection.createIndex({ email: 1 }, { unique: true }),你的两个理解都是正确的:
- 该索引会强制保证email字段的唯一性,MongoDB会拒绝任何导致email重复的写入或更新操作;
- 执行
collection.findOne({email: 'my@email.com'})这类单条件查询时,MongoDB会直接使用这个email索引定位文档,大幅提升查询效率,避免全集合扫描。
针对多条件更新操作的索引优化
对于 collection.updateOne({email: '...', version: 2}, update) 这类同时基于email和version的过滤操作,建议创建复合索引:
collection.createIndex({ email: 1, version: 1 })
原因如下:
- 复合索引可以覆盖查询中的两个过滤条件,MongoDB能通过索引快速定位到同时匹配
email和指定version的文档,优化更新操作的性能; - 该复合索引不会影响已有的email唯一索引,两者可共存。
注:复合索引的字段顺序很关键,这里将
内容的提问来源于stack exchange,提问作者Ilja
相关产品推荐
相关产品推荐

