在mongoDB中通过_id搜索更有效吗?



在我的用例中,我想通过MongoDB中给定的唯一字符串搜索文档。然而,我希望我的查询是快速和搜索_id将增加一些开销。我想知道在MongoDB中是否有任何好处通过_id搜索任何其他唯一值的文档?
据我所知,对象ID类似于文档中的任何其他唯一值[针对仅搜索的情况提出的要点]。

至于开销,您可以假设我将字符串缓存到objectID,缓存非常小并且在内存中[几乎可以忽略不计],尽管DB很大。

分析查询性能

我建议您使用mongoDB提供的.explain()来分析您的查询性能。

假设我们要执行这个查询

db.inventory.find( { quantity: { $gte: 100, $lte: 200 } } )

这是查询执行的结果

{ "_id" : 2, "item" : "f2", "type" : "food", "quantity" : 100 }
{ "_id" : 3, "item" : "p1", "type" : "paper", "quantity" : 200 }
{ "_id" : 4, "item" : "p2", "type" : "paper", "quantity" : 150 }

如果我们这样称呼.execution()

db.inventory.find(
{ quantity: { $gte: 100, $lte: 200 } }
).explain("executionStats")

它将返回以下结果:

{
"queryPlanner" : {
"plannerVersion" : 1,
...
"winningPlan" : {
"stage" : "COLLSCAN",
...
}
},
"executionStats" : {
"executionSuccess" : true,
"nReturned" : 3,
"executionTimeMillis" : 0,
"totalKeysExamined" : 0,
"totalDocsExamined" : 10,
"executionStages" : {
"stage" : "COLLSCAN",
...
},
...
},
...
}

更多细节可以在这里找到

通过_id和索引进行搜索的效率如何

回答你的问题,使用索引总是更有效。索引是一种特殊的数据结构,它以易于遍历的形式存储集合数据集的一小部分。与_id是MongoDB提供的默认索引,这使得它更高效。

如果没有索引,MongoDB必须执行集合扫描,即扫描集合中的每个文档,以选择匹配查询语句的文档。

,,使用_id这样的指标比较好!

您还可以使用createIndex()

创建自己的索引
db.collection.createIndex( <key and index type specification>, <options> )

优化MongoDB查询

如果你想优化你的查询,有多种方法可以做到。

  • 创建自定义索引以支持查询
  • 限制查询结果个数,减少网络需求
db.posts.find().sort( { timestamp : -1 } ).limit(10)
  • 使用投影只返回必要的数据
db.posts.find( {}, { timestamp : 1 , title : 1 , author : 1 , abstract : 1} ).sort( { timestamp : -1 } )
  • 使用$hint选择特定索引
db.users.find().hint( { age: 1 } )

简短的回答,是的,_id是主键,它被索引了。当然快了。

但是您也可以在其他字段上使用索引,从而获得更有效的查询。

最新更新