0

次の構造でMongoDBにオブジェクトが格納されていると仮定しましょう。

Transaction
{
  _id
  userId
  accountId
}

そして、私が次のインデックスを持っていると仮定します。

db.Transaction.ensureIndex({"userId": 1})

次のクエリは、検索時間を最小限に抑えるためにインデックスを利用していますか?

db.Transaction.find( {userId: 'user1234', accountId: 'account1234'} );

つまり、MongoDBはインデックスを使用して結果を「絞り込み」、userId次にテーブルスキャンを実行しaccountIdますか?

db.Transaction.find( {userId: 'user1234', accountId: 'account1234'} ).explain()
{
    "cursor" : "BtreeCursor userId_1",
    "nscanned" : 2,
    "nscannedObjects" : 2,
    "n" : 1,
    "millis" : 1,
    "nYields" : 0,
    "nChunkSkips" : 0,
    "isMultiKey" : false,
    "indexOnly" : false,
    "indexBounds" : {
            "userId" : [
                    [
                            "user1234",
                            "user1234"
                    ]
            ]
    }

explain()クエリのforを見ると、が表示されてBtreeCursor userId_1いるので、すべてのユーザーがuserIdofuser1234を取得し、スキャンして(2つのアイテムのみ)accountIdofを見つけたとaccount1234思います-これは正しいですか?

前もって感謝します。

4

1 に答える 1

3

次のクエリは、検索時間を最小限に抑えるためにインデックスを利用していますか?

はい、そうです。

クエリのexplain()を見ると、BtreeCursor userId_1と表示されているので、user1234のuserIdを持つすべてのユーザーを取得し、スキャンしてaccount1234のaccountIdを見つけたと思います-これは正しいですか?

はい。それで合っています。詳細については、こちらをご覧ください。

于 2012-08-17T23:03:44.340 に答える