アプリケーションが同じフィールドに対して繰り返しクエリを実行する場合は、それらのフィールドにインデックスを作成してパフォーマンスを向上させます。
インデックスを作成するには、ドライバーの createIndex() shell メソッドまたは同等のメソッドを使用します。このページでは、MongoDB Shell とドライバーの例を示します。
このタスクについて
MongoDB シェルまたはドライバーでインデックス作成コマンドを実行すると、同じ仕様のインデックスが存在しない場合にのみ MongoDB はインデックスを作成します。
インデックスを使用するとクエリのパフォーマンスは向上しますが、インデックスを追加すると書込み操作の動作に悪影響が生じます。書込みと読み取りの比率が高いコレクションでは、挿入およびアップデートのたびにすべてのインデックスを更新する必要があるため、インデックスの使用コストは高くなります。
警告
暗号化されたフィールドではインデックスを作成しないでください。Queryable Encryptionを使用する暗号化されたフィールドにインデックスを作成すると、パフォーマンスに悪影響が生じます。代わりに、__safeContent__フィールドにインデックスを作成して、暗号化されたフィールドに対するクエリをサポートできます。
手順
例
結果
Use mongosh to monitor index creation.
コレクションに存在するインデックスを確認するには、現在構築中のインデックスを含め、db.collection.getIndexes() メソッドを実行します。
db.collection.getIndexes()
インデックスが作成中かどうかを確認するには、adminデータベースで $currentOp と db.aggregate() を使用します。
次の集計パイプラインでは、$match ステージを使用して、nameフィールドに降順インデックスを構築するアクティブな操作を示します。
db.getSiblingDB("admin").aggregate( [ { $currentOp : { idleConnections: true } }, { $match : {"command.createIndexes": { $exists: true } } } ] )
MongoDBは、activeフィールドをfalseに設定することにより、コミットクォーラムの待機中を含むさまざまな段階でインデックス構築をアイドル接続としてマークします。idleConnections: true 設定には、これらのアイドル接続が $currentOp 出力に含まれます。
ドライバーを使用して既存のインデックスの情報を表示するには、「ドライバーのドキュメント」を参照してください。
詳細
To learn how to create indexes in MongoDB Compass, see Manage Indexes in the Compass documentation.
インデックスが使用される頻度を確認するには、「インデックス使用状況の測定」を参照してください。
インデックスの名前を指定する方法については、「インデックス名の指定」を参照してください。
MongoDB がインデックスを構築する方法については、「インデックス構築プロセス」を参照してください。