为什么这个mongodb查询在';s索引?
为什么在使用索引时,以下查询速度较慢为什么这个mongodb查询在';s索引?,mongodb,mongodb-query,Mongodb,Mongodb Query,为什么在使用索引时,以下查询速度较慢 db.foo.count({$and:[{'metadata.source':'WZ'}, {'metadata.source':'ED'}]}) 使用索引 { "v" : 1, "key" : { 'metadata.source" : 1 }, "name" : "metadata.source_1", "ns" : "bar.foo" } 其中元数据字段是一个JSON数组 具有单个值的以下内容立即返回 db.foo.count({'
db.foo.count({$and:[{'metadata.source':'WZ'}, {'metadata.source':'ED'}]})
使用索引
{
"v" : 1,
"key" : { 'metadata.source" : 1 },
"name" : "metadata.source_1",
"ns" : "bar.foo"
}
其中元数据字段是一个JSON数组
具有单个值的以下内容立即返回
db.foo.count({'metadata.source':'WZ'})
更新:
我正在使用Mongo v3.0.3。安装程序是一个分片副本集,包含大约1200万个文档
我以同样的延迟尝试了以下内容
db.foo.count({'metadata.source' : { $all : ['WZ', 'ED'] }})
当我检查db.currentOp()时,它会显示以下似乎正确的内容:
"planSummary" : "IXSCAN { metadata.source: 1.0 }"
但是numYields非常高,并且还在继续增加。这是否意味着索引不适合内存,正在从磁盘读取。基于我的db.foo.stats(),应该有足够的内存。还有什么可以帮助诊断的吗
这也使用了wiredTiger存储引擎,它似乎存在一些值得注意的性能问题。我正在尝试升级到3.0.7,看看这是否解决了问题。你的意思是没有索引会变慢吗?我的意思是它似乎永远运行。单个值上的计数会立即返回,例如db.foo.count({'metadata.source':'WZ'})。@MikeWagner,在
和
中的第一个查询中缺少大括号是否正常?如果我没有弄错的话,它应该是db.foo.count({$and:[{'metadata.source':'WZ'},{'metadata.source':'ED'}])
实际上我有它……它在另一个网络上,我没有正确键入它。我会更新的post@Philipp实际上,中的$更像是一种$或快捷方式。这将是一个错误,如db.foo.count({'metadata.source':{$all:['WZ','ED']}})
。你能试试吗,迈克?你的意思是没有索引会慢一些吗?我的意思是似乎永远都在运行。单个值上的计数会立即返回,例如db.foo.count({'metadata.source':'WZ'})。@MikeWagner,在和
中的第一个查询中缺少大括号是否正常?如果我没有弄错的话,它应该是db.foo.count({$and:[{'metadata.source':'WZ'},{'metadata.source':'ED'}])
实际上我有它……它在另一个网络上,我没有正确键入它。我会更新的post@Philipp实际上,
中的$更像是一种$或快捷方式。这将是一个错误,如db.foo.count({'metadata.source':{$all:['WZ','ED']}})
。你能试试吗,迈克?