24

Mongodb の Explain クエリ出力で、「nscanned」と「nscannedObjects」の正確な違いを取得できません。

私が読むことができるMongoDB Explainのドキュメントで:

nscanned検査された項目 (文書または索引項目) の数。項目は、オブジェクトまたはインデックス キーの場合があります。「カバーされたインデックス」が関係している場合、nscanned は nscannedObjects よりも高くなる可能性があります。

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

この 2 つのフィールドの違いは何ですか? さらに具体的には、BtreeCursor (インデックス) を使用するクエリがあり、これら 2 つのフィールドに 2 つの異なる値がある場合の正確な意味は次のとおりです。

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

「対象インデックス」とは何かを知っています。上記の例でクエリが何をしたかを正確に理解したいと思います。結果セットを生成するために、9 つの要素 (nscanned = 9) を通過 (「スキャン」) しましたか?これらはすべてインデックス エントリであり、そのうちの 5 つのみ (nscannedObjects = 5) の値を読み取り (「検査」) しましたか?

4

2 に答える 2

26

これは、次
のことを意味します。クエリが5つのドキュメントを返しn
ました-インデックスから9つのドキュメントをスキャンnscanned
し、コレクションから5つの完全なドキュメントを読み取りました-nscannedObjects

同様の例が次の場所にあります:http:
//docs.mongodb.org/manual/reference/method/cursor.explain/#cursor.explain

于 2012-12-17T08:04:47.187 に答える
1

"cursor" が Index ==> nscanned = no の場合。"cursor" が FullTableScan ==> nscanned = no の場合は、スキャンされたインデックスの数。スキャンしたドキュメントの

nscannedObjects ==> スキャンされたドキュメントの数

クエリを実行するときは、すべてのカウントを最小化するようにしてください。つまり、nscanned と nscannedObjects の両方が最小であることは、クエリより高速に実行されることを意味します!

于 2012-12-17T14:58:52.430 に答える