【发布时间】:2014-01-29 20:35:26
【问题描述】:
假设,我们有如下提到的 mongo 集合
db.test.findOne() { "_id" : ObjectId("52d0313dc62b629cfabe22ff"), "a" : 1, "b" : 1, "c" : 1 }
而且这个集合有超过百万条记录。
现在,如果我想找出条件为字段“a”大于 1000 且“b”字段小于 9000 的记录 那么我的 mongo 查询可能就像 ..
db.test.find({'a':{'$gt':1000}, 'b':{'$lt': 9000}}, {'a':1, 'c':1} ) 为了使上述搜索更快,我已经在“a”和“b”字段上应用了复合索引。 它已被上述查询使用..
现在,您必须知道,所有集合都带有默认索引“_id_”字段作为主键。
我上面的 mongo 查询是否使用了默认索引“_id_”?如果是,那怎么办?如果不是,那为什么?
谢谢你 javaamtho
【问题讨论】:
-
你能澄清你的问题吗?您已经说过查询使用的是您创建的复合索引,而不是
_id上的索引。 -
使用
explain确定正在使用的索引。如果您的查询中没有指定_id的索引,则不会使用它。 -
@JohnnyHK 是的。使用解释(),我可以看到我的复合索引正在被使用,但 mongo 是否也出于某种目的使用默认的 id 索引?如果我的 mongo 引擎在内部使用它,我怎么能看到两个以上的索引用法?我的问题很棘手,但你现在如何得到它..
-
@javaamtho MongoDB 每个查询从不使用多个索引。
标签: mongodb indexing mongodb-query mongodb-indexes