MongoDB クエリ分析
MongoDB クエリ分析は、私たちが提案したインデックスが効果的であるかどうかを確認でき、クエリ ステートメントのパフォーマンス分析のための重要なツールです。
MongoDB クエリ分析に一般的に使用される関数は、explain() とhint() です。
Explain()
explain オペレーションを使用して、クエリ情報、使用状況インデックス、クエリ統計などを提供します。インデックスを最適化すると役に立ちます。
次に、users コレクションに性別と user_name のインデックスを作成します:
>db.users.ensureIndex({gender:1,user_name:1}) </p> <p>现在在查询语句中使用 explain :</p> <pre> >db.users.find({gender:"M"},{user_name:1,_id:0}).explain()
上記の Explain() クエリは次の結果を返します:
{ "cursor" : "BtreeCursor gender_1_user_name_1", "isMultiKey" : false, "n" : 1, "nscannedObjects" : 0, "nscanned" : 1, "nscannedObjectsAllPlans" : 0, "nscannedAllPlans" : 1, "scanAndOrder" : false, "indexOnly" : true, "nYields" : 0, "nChunkSkips" : 0, "millis" : 0, "indexBounds" : { "gender" : [ [ "M", "M" ] ], "user_name" : [ [ { "$minElement" : 1 }, { "$maxElement" : 1 } ] ] } }
次に、この結果セットのフィールドを見てみましょう:
indexOnly : フィールドは true で、インデックスを使用することを示します。
cursor: このクエリはインデックスを使用しており、MongoDB のインデックスは B ツリー構造に格納されているため、これも BtreeCursor 型のカーソルを使用します。インデックスが使用されない場合、カーソルのタイプは BasicCursor になります。このキーは、使用しているインデックスの名前も示します。この名前を通じて、現在のデータベースの system.indexes コレクションを表示できます (インデックス情報が保存されるため、システムが自動的に作成します。これについては後で説明します)。インデックスの詳細情報を取得します。
n: 現在のクエリによって返されたドキュメントの数。
nscanned/nscannedObjects: 現在のクエリによってスキャンされたコレクション内のドキュメントの数を示します。私たちの目標は、この値を返されたドキュメントの数にできるだけ近づけることです。
millis: 現在のクエリに必要な時間 (ミリ秒単位)。
indexBounds: 現在のクエリで使用される特定のインデックス。
hint() の使用
MongoDB クエリ オプティマイザーは通常非常にうまく機能しますが、ヒントを使用して MongoDB に特定のインデックスの使用を強制することもできます。
この方法により、場合によってはパフォーマンスが向上します。 インデックス付きコレクションを取得し、複数フィールド クエリを実行します (一部のフィールドはすでにインデックスが付けられています)。
次のクエリの例では、クエリに性別と user_name インデックス フィールドの使用を指定しています:
>db.users.find({gender:"M"},{user_name:1,_id:0}).hint({gender:1,user_name:1})
Explain() 関数を使用して上記のクエリを分析できます:
>db.users.find({gender:"M"},{user_name:1,_id:0}).hint({gender:1,user_name:1}).explain()