MongoDB がカバーするインデックス クエリ
MongoDB の公式ドキュメントには、カバレッジ クエリは次のクエリであると記載されています:
すべてのクエリ フィールドはインデックスの一部です
すべてのクエリの戻りフィールドは同じインデックス内にあります
すべてのフィールドに起因しますクエリ内に出現するものはインデックスの一部であり、 MongoDB を使用すると、一致するクエリ条件をデータ ドキュメント全体で検索し、同じインデックスを使用してクエリ結果を返す必要がなくなります。
インデックスは RAM に存在するため、インデックスからデータを取得する方が、ドキュメントをスキャンしてデータを読み取るよりもはるかに高速です。
カバーインデックスクエリの使用
カバーインデックスクエリをテストするには、次のユーザーコレクションを使用します:
{ "_id": ObjectId("53402597d852426020000002"), "contact": "987654321", "dob": "01-01-1991", "gender": "M", "name": "Tom Benzamin", "user_name": "tombenzamin" }
フィールド性別とuser_nameを使用して、ユーザーコレクションに結合インデックスを作成します:
>db.users.ensureIndex({gender:1,user_name:1})
これで、インデックスは以下をカバーします次のクエリ:
>db.users.find({gender:"M"},{user_name:1,_id:0})
つまり、上記のクエリの場合、MongoDB はデータベース ファイルを検索しません。代わりに、インデックスからデータを取得します。これは非常に高速なデータ クエリです。
インデックスには _id フィールドが含まれていないため、クエリでは _id がデフォルトで返され、それを MongoDB クエリ結果セットから除外できます。
次の例では _id が除外されず、クエリはカバーされません:
>db.users.find({gender:"M"},{user_name:1})
最後に、次のクエリの場合、カバーするインデックス クエリは使用できません:
すべてのインデックス フィールドは配列です
-
すべてのインデックスフィールドはサブドキュメントです