2

クエリを調べようとしていますが、インデックス付きフィールド「purchaseState」から直接クエリを実行すると、「nscannedObjectsAllPlans」と「nscannedAllPlans」が何をしているのかわかりません。

「 nscannedObjects」、「nscanned」、「nscannedObjectsAllPlans」、および「nscannedAllPlans」のスキャンされたアイテムと同じ結果が得られます

ただし、400を超える価格をクエリに追加すると、 nscannedObjectsAllPlansはnscannedObjectsよりも大きくなります。nscannedObjectsAllPlansが、purchase_stateインデックスとpurchase_state_Idインデックスを使用してプランを実行するスキャンオブジェクトの総数である かどうかを知りたい ですか?それとも、2つのインデックスプランの結果のうち大きい方を示しているだけですか?

購入状態にインデックスを追加してから、購入状態とIDにインデックスを追加しました

db.toys.ensureIndex({"purchaseState":1})

db.toys.ensureIndex({"purchaseState":1、 "_id":1})

            **db.toys.find({"purchaseState" : "NY"}).pretty().explain()**

               "cursor" : "BtreeCursor purchaseState_1",
               "isMultiKey" : false,
               "n" : 1596,
               "nscannedObjects" : 1596,
               "nscanned" : 1596,
               "nscannedObjectsAllPlans" : 1596,
               "nscannedAllPlans" : 1596,
               "scanAndOrder" : false,
               "indexOnly" : false,
               "nYields" : 0,
               "nChunkSkips" : 0,
               "millis" : 3,
               "indexBounds" : {
                       "purchaseState" : [
                               [
                                       "NY",
                                       "NY"
                               ]
                       ]
               },
               "server" : "XXXXXXX:27017"

            **db.toys.find({"purchaseState" : "NY", "price": { $gt : 400 }}).pretty().explain()**

               "cursor" : "BtreeCursor purchaseState_1",
               "isMultiKey" : false,
               "n" : 1423,
               "nscannedObjects" : 1596,
               "nscanned" : 1596,
               "nscannedObjectsAllPlans" : 1808,
               "nscannedAllPlans" : 1808,
               "scanAndOrder" : false,
               "indexOnly" : false,
               "nYields" : 0,
               "nChunkSkips" : 0,
               "millis" : 10,
               "indexBounds" : {
                       "purchaseState" : [
                               [
                                       "NY",
                                       "NY"
                               ]
                       ]
               },
               "server" : "XXXXXXX:27017"
4

2 に答える 2

2

MongoDBは、利用可能なさまざまなプランを並行して実行し、その中から最適なプランを選択して、その種類のデータセットのプランを記憶します。また、コレクションの後に1000回の書き込みごとにプランを自動的に検証して、さらに同様のクエリを実行するための適切なプランがあることを確認します。

nscannedObjectsAllPlansは、クエリを実行しているときに、2つの異なるプランを使用すると、その数を示します。

nscannedObjectsAllPlans/nscannedAllPlansに利用できる明確なドキュメントはありません。どちらも説明されていないMongoDBコースを受講しましたが、最適なプランを選択する方法によって、間接的にnscannedAllPlansの答えが得られます。

お役に立てれば!

于 2012-12-19T20:08:32.790 に答える
2

MongoDBがクエリを実行しているとき、いくつかの異なるプランを並行して実行して、どれが最適かを確認しようとする場合があります。nscannedAllPlansは、すべてのプランのnscannedの合計であり、nscannedObjectsAllPlans/nscannedObjectsの場合も同様です。

于 2012-12-19T20:31:48.167 に答える