0

たとえば、2つのフィールドが複合インデックスの一部ではない場合、2つのフィールドをクエリするとどうなりますか。

db.collection.ensureIndex( { a: 1 } )
db.collection.ensureIndex( { b: 1 } )

db.collection.find( { a: 2, b: 2 } )

explain()多数のドキュメントがスキャンされる可能性があるかどうか、またはMongo DBが何もスキャンせず、次のように返されるかどうかを知りたいのですが。

indexOnly: YES
4

1 に答える 1

0

ExplainindexOnlyは、探しているすべての値がインデックス(ソートを含む)にある場合にのみ返されます。基本的に、カバーされたインデックスを示します:http: //docs.mongodb.org/manual/applications/indexes/#create-indexes-that-support-covered-queries

この場合、2つのフィールドでクエリを実行していますが、1つの個別のインデックスに含まれるのはそのうちの1つだけです。

MongoDBが単一の句に複数のインデックスを使用できないことを考慮すると($orここでは複数の句であるため例外であり、通常のクエリとは異なります)、indexOnlyクエリを実行せず、代わりにインデックスでコレクションを検索してaから実行しますbその範囲内に含まれるドキュメントの完全なドキュメントスキャンにより、その値を理解して結果を返します。

indexOnlyカーソルを適切に使用するには、クエリの次の部分を1つのインデックスに収める必要があることにも注意してください。

  • 調子
  • 投影
  • 選別

すなわち:

db.ensureIndex({a:1,b:1});
db.col.find({a:1}, {_id:0,a:1,b:1}).sort({b:1});

indexOnlyカーソルを使用します。

于 2013-01-12T19:42:52.760 に答える