我的 MongoDB 相对简单:一个数据集/条目有大约 3 层的 30 个属性。这样一个条目最多有大约 5000 个字符。我有 50 万个这样的条目。 当我执行以下查询时...
db.images.find({ "featureData.cedd": { $exists: false}}).count()
这个查询非常慢,虽然没有建立索引,但是根据我的MySQL经验,执行这样的查询不应该需要20分钟。
在mongo终端上直接执行时,CPU使用率仅为3%,而仍有超过2GB的可用内存。
感谢您给了我一些提示!
编辑:查询的explain()(不包括count)结果如下:
db.images.find({ "featureData.cedd": { $exists: false }}).explain()
{
"cursor" : "BasicCursor",
"nscanned" : 532537,
"nscannedObjects" : 532537,
"n" : 438,
"millis" : 1170403,
"nYields" : 0,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,
"indexBounds" : {
}
}
iostat的输出:
Linux 3.2.0-58-generic (campartex) 03/25/2014 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
34.93 0.01 0.25 0.48 0.00 64.33
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 2.08 103.79 11.26 172805914 18749067
fd0 0.00 0.00 0.00 148 0
添加索引后explain()的输出结果:
db.images.find({ "featureData.cedd": { $exists: false }}).explain()
{
"cursor" : "BtreeCursor featureData.cedd_1",
"nscanned" : 438,
"nscannedObjects" : 438,
"n" : 438,
"millis" : 2,
"nYields" : 0,
"nChunkSkips" : 0,
"isMultiKey" : true,
"indexOnly" : false,
"indexBounds" : {
"featureData.cedd" : [
[
null,
null
]
]
}
}