首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么Mongo提示使查询速度提高了10倍?

为什么Mongo提示使查询速度提高了10倍?
EN

Stack Overflow用户
提问于 2011-10-12 02:20:12
回答 3查看 13.5K关注 0票数 22

如果我使用explain()从shell运行一个mongo查询,获得所用索引的名称,然后再次运行相同的查询,但是使用hint()指定要使用的相同索引-- explain plan中的"millis“字段会显著减少

例如

未提供任何提示:

代码语言:javascript
复制
>>db.event.find({ "type" : "X", "active" : true, "timestamp" : { "$gte" : NumberLong("1317498259000") }, "count" : { "$gte" : 0 } }).limit(3).sort({"timestamp" : -1 }).explain();

{
    "cursor" : "BtreeCursor my_super_index",
    "nscanned" : 599,
    "nscannedObjects" : 587,
    "n" : 3,
    "millis" : 24,
    "nYields" : 0,
    "nChunkSkips" : 0,
    "isMultiKey" : true,
    "indexOnly" : false,
    "indexBounds" : { ... }
} 

提供的提示:

代码语言:javascript
复制
>>db.event.find({ "type" : "X", "active" : true, "timestamp" : { "$gte" : NumberLong("1317498259000") }, "count" : { "$gte" : 0 } }).limit(3).sort({"timestamp" : -1 }).hint("my_super_index").explain();

{
    "cursor" : "BtreeCursor my_super_index",
    "nscanned" : 599,
    "nscannedObjects" : 587,
    "n" : 3,
    "millis" : 2,
    "nYields" : 0,
    "nChunkSkips" : 0,
    "isMultiKey" : true,
    "indexOnly" : false,
    "indexBounds" : { ... }
} 

唯一的区别是"millis“字段

有人知道这是为什么吗?

更新:“选择使用哪个索引”不能解释它,因为据我所知,mongo为每个X选择索引(100?)运行,因此它应该与提示下一次(X-1)运行一样快

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-21 19:22:23

Mongo使用一个算法来确定在没有提供提示的情况下使用哪个索引,然后将用于类似查询的索引缓存到下1000个调用中

但是,无论何时解释mongo查询,它都会运行索引选择算法,因此,与不使用提示的explain()相比,带提示的explain()花费的时间总是更少。

这里回答了类似的问题Understanding mongo db explain

票数 26
EN

Stack Overflow用户

发布于 2012-03-28 03:28:31

Mongo进行了两次相同的搜索,从扫描对象的数量可以看出。您还可以看到使用的索引是相同的(看一下"cursor“条目),两者都已经使用了您的my_super_index索引。

“提示”只告诉Mongo使用特定的索引,它已经在第一个查询中自动使用了该索引。

第二次搜索更简单,更快,因为所有数据可能都已经在缓存中了。

票数 6
EN

Stack Overflow用户

发布于 2012-08-21 16:19:32

我为同样的事情挣扎着寻找理由。我发现当我们有很多索引时,mongo确实比使用hint花费了更多的时间。Mongo基本上花了很多时间来决定使用哪个索引。想象一下这样一个场景:您有40个索引,然后执行查询。Mongo需要做的第一个任务是哪个索引最适合用于特定的查询。这意味着mongo需要扫描所有的键,并在每次扫描中进行一些计算,以找到一些性能指标,如果使用这个键的话。提示肯定会加速,因为索引键扫描将被保存。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7730591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档