【发布时间】:2015-01-07 23:04:48
【问题描述】:
我正在努力解决这个问题......任何帮助都会很棒。
我在 RoboMongo (CLI) 中运行的查询相同:
db.post.find({utc:{$lte:utc}})
.sort({utc:-1}).limit(100).hint({utc:-1})
和我的 Node 应用程序(使用本机驱动程序):
mo.post.find({utc:{$lte:utc}},{
fields:{geo:0, bin:0, flg:0, mod:0, edt:0},
hint:{utc:-1}, sort:{utc:-1}, limit:100
}).toArray(function(err, result)
由于某种原因,性能非常不同。顶部的运行时间不到 1 毫秒,底部的运行时间超过 100 毫秒。当我查看我得到的快速解释的“解释”时:
"cursor" : "BtreeCursor utc_-1",
"isMultiKey" : false,
"n" : 100,
"nscannedObjects" : 100,
"nscanned" : 100,
"nscannedObjectsAllPlans" : 100,
"nscannedAllPlans" : 100,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 0,
"indexBounds" : {
"utc" : [
[
ISODate("2015-01-07T00:47:32.786Z"),
true
]
]
},
对于慢速的:
cursor: "BtreeCursor utc_-1"
isMultiKey: false
n: 1
nscannedObjects: 1
nscanned: 1
nscannedObjectsAllPlans: 1
nscannedAllPlans: 1
scanAndOrder: false
indexOnly: false
nYields: 0
nChunkSkips: 0
millis: 0
indexBounds: {
utc: [1]
0: [2]
0: "2015-01-07T22:50:05.000Z"
1: true
-
-
}-
有人知道这里会发生什么吗?他们使用相同的索引运行同一个数据库?
【问题讨论】:
-
它们不能被解释为相同的查询 - 如果它们具有相同的 limit+skip 值,相同的查询应该产生相同的
n。您能否仔细检查您是否获得了正确查询的解释?另外,时间信息是从哪里来的? -
这很奇怪 - 它是完全相同的查询 - 它会产生相同的结果。 N=1 解释没有意义,这就是永远的查询。两者都命中同一张表,时间来自 RoboMongo(快速查询)和 HTTP 客户端在较慢查询(通过本机节点驱动程序运行)时调用本地主机。
-
我在这里也看到了古怪的行为:不同但可能相关? stackoverflow.com/questions/27831936/…
-
你能在 mongo shell 中运行查询并发布解释吗?我对 RoboMongo 持怀疑态度,但我也不太了解。
-
和 RoboMongo 一样。问题似乎是原生驱动解释:stackoverflow.com/questions/27844128/…
标签: javascript node.js mongodb database