【问题标题】:Does default _id_ index use by mongoquery?mongoquery 是否使用默认 _id_ 索引?
【发布时间】: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


【解决方案1】:

,mongo 不会在您的查询中使用 _id 上的默认索引,因为 _id 既不会出现在条件中,也不会出现在查询的排序中。

【讨论】:

  • 感谢 ..so 在排序查询中,如 db.test.find({'a':{'$gt':1000}, 'b':{'$lt': 9000}}, {'a':1, 'c':1}).sort({b:1}) .. 它不会使用它?
  • 否,仅当您在条件或排序对象中使用“_id”时才使用默认索引。 IE。如果您搜索具有特定 _id 的文档: db.test.find({_id:my_certain_id}) 将使用默认索引。
  • 如果你觉得我的回答是对的,请采纳。你可以在这里阅读更多:docs.mongodb.org/manual/administration/indexes
  • @heinob:你能在dba.stackexchange.com/questions/115444/…看看类似的问题吗?
  • 我猜它应该被标记为正确的问题。
猜你喜欢
  • 1970-01-01
  • 2013-05-20
  • 1970-01-01
  • 2017-06-08
  • 1970-01-01
  • 2013-07-19
  • 2014-02-02
  • 1970-01-01
  • 2021-11-29
相关资源
最近更新 更多