MongoDB:包含“_id”的复合索引有什么优势吗?
MongoDB: Is there any advantage to a compound index that includes '_id'?
查询如下所示:
db.myCollection.find({_id: {$in: [...]}, isActive: true})
_id
是常规的 ObjectId
,isActive
是分配给每个文档的布尔值。
使用像 {_id: 1, isActive: 1}
这样的索引是否有任何性能优势?一方面,_id
是一个唯一字段并且已经编入索引,因此任何额外的索引都是多余的。另一方面,Mongo 能够通过仅检查索引来抛出不匹配的文档(即 isActive = false
),这可能会有好处,无论多么轻微。
我认为使用复合索引是个好主意。但是,由于 isActive 字段只能有两个值,更好的索引是
{isActive: 1, _id: 1}
这将确保在下一步中只处理那些处于活动状态的对象。
查询如下所示:
db.myCollection.find({_id: {$in: [...]}, isActive: true})
_id
是常规的 ObjectId
,isActive
是分配给每个文档的布尔值。
使用像 {_id: 1, isActive: 1}
这样的索引是否有任何性能优势?一方面,_id
是一个唯一字段并且已经编入索引,因此任何额外的索引都是多余的。另一方面,Mongo 能够通过仅检查索引来抛出不匹配的文档(即 isActive = false
),这可能会有好处,无论多么轻微。
我认为使用复合索引是个好主意。但是,由于 isActive 字段只能有两个值,更好的索引是
{isActive: 1, _id: 1}
这将确保在下一步中只处理那些处于活动状态的对象。