我正在运行一个非常普通的 MongoDB 查询,没有什么复杂或特别的,我想知道它所花费的时间(> 1 秒)是否正常,或者我的索引是否有问题。
我为这个特定查询提供了一个索引,并explain()
告诉我它已被使用,但它每次都会对集合进行全面扫描,并使整个网页的速度减慢 > 1 秒。
查询:
db.tog_artikel.find({"art_filter":{"$exists":false},"$where":"this._id == this.art_hauptartikelnr"})
解释:
> db.tog_artikel.find({"art_filter":{"$exists":false},"$where":"this._id == this.art_hauptartikelnr"}).explain()
{
"cursor" : "BtreeCursor art_filter_1_art_hauptartikelnr_1",
"nscanned" : 21306,
"nscannedObjects" : 21306,
"n" : 21306,
"millis" : 1180,
"nYields" : 0,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,
"indexBounds" : {
"art_filter" : [
[
null,
null
]
],
"art_hauptartikelnr" : [
[
{
"$minElement" : 1
},
{
"$maxElement" : 1
}
]
]
}
}
指数:
{
"v": 1,
"key": {
"art_filter": 1,
"art_hauptartikelnr": 1
},
"ns": "togshop.tog_artikel",
"background": true,
"name": "art_filter_1_art_hauptartikelnr_1"
}
为什么每次都扫描完整的集合?为什么是isMultiKey
假的,我该如何优化这个查询/索引?
环境是一个独立的服务器,MongoDB 2.0.1,64 位 Linux,从带有 php-mongo 1.2.6 的 PHP 访问