私は非常に普通の MongoDB クエリを実行していますが、特に複雑なことや特別なことは何もありません。所要時間 (> 1 秒) が正常なのか、それともインデックスに問題があるのか疑問に思っています。
この特定のクエリのインデックスを提供し、explain()
それが使用されていることも伝えましたが、毎回コレクションのフル スキャンが行われ、Web ページ全体が 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"
}
コレクション全体が毎回スキャンされるのはなぜですか? false の理由とisMultiKey
、このクエリ/インデックスを最適化するにはどうすればよいですか?
環境はスタンドアロン サーバー、MongoDB 2.0.1、64 ビット Linux、php-mongo 1.2.6 を使用して PHP からアクセス