2012-12-17 4 views
20

Mongodbのexplainクエリ出力の "nscanned"と "nscannedObjects"の正確な違いはありません。私は読むことができMongoDB Explain documentationMongodbのexplain(): "nscanned"と "nscannedObjects"の違い

は、アイテムの数(文書またはインデックスエントリ)が検討nscanned。アイテム は、オブジェクトまたはインデックスキーである可能性があります。 「カバーされたインデックス」が含まれている場合、 nscannedはnscannedObjectsよりも高い可能性があります。

nscannedObjectsスキャンしたドキュメントの数。

これら2つのフィールドの違いは何ですか?私はBtreeCursor(インデックス)を使用するクエリを、持っているとき そして、もっと具体的には、正確に何を意味しており、これら2つのフィールドが、たとえば、2つの異なる値を持っている:

{ 
    "cursor" : "BtreeCursor a_1_b_1", 
    "isMultiKey" : false, 
    "n" : 5, 
    "nscannedObjects" : 5, 
    "nscanned" : 9, 
    (...) 
} 

私は "covered index"が何であるかを知っています。 9つの要素(nscanned = 9)を通過させたか(「スキャンした」)、すべてがインデックスエントリであり、値を読み取った(「調べた」)場合は、結果セットを生成するためにそれらのうちの5つだけ(nscannedObjects = 5)?

答えて

22

これは以下を意味します:
クエリインデックスから9つのドキュメントスキャンn
- - nscanned
を、次いでコレクションから5つの完全なドキュメントを読む - 5つの文書を返さnscannedObjects

同様の例は、で与えられる: "カーソル" である場合
http://docs.mongodb.org/manual/reference/method/cursor.explain/#cursor.explain

0

インデックス==> nscanned =いいえ。 「カーソル」がFullTableScan ==> nscanned = noの場合は、インデックスがスキャンされた です。文書の==>文書の番号を照会するときに、すなわちnscanned、すべての数を最小限に抑えるようにしてください

をスキャンしてnscannedObjectsの両方が最小とクエリ実行速度べきであることを意味している!

nscannedObjectsをスキャン

関連する問題