アプリケーションが同じフィールドに対して繰り返しクエリを実行する場合は、それらのフィールドにインデックスを作成してパフォーマンスを向上させます。
インデックスを作成するには、ドライバーの createIndex() shell メソッドまたは同等のメソッドを使用します。このページでは、MongoDB Shell とドライバーの例を示します。
このタスクについて
MongoDB シェルまたはドライバーでインデックス作成コマンドを実行すると、同じ仕様のインデックスが存在しない場合にのみ MongoDB はインデックスを作成します。
インデックスを使用するとクエリのパフォーマンスは向上しますが、インデックスを追加すると書込み操作の動作に悪影響が生じます。書込みと読み取りの比率が高いコレクションでは、挿入およびアップデートのたびにすべてのインデックスを更新する必要があるため、インデックスの使用コストは高くなります。
警告
暗号化されたフィールドではインデックスを作成しないでください。Queryable Encryptionを使用する暗号化されたフィールドにインデックスを作成すると、パフォーマンスに悪影響が生じます。代わりに、__safeContent__フィールドにインデックスを作成して、暗号化されたフィールドに対するクエリをサポートできます。
手順
➤ このページの例の言語を設定するには、右側のナビゲーション ペインにある [言語の選択] ドロップダウン メニューを使用します。
mongoshでインデックスを作成するには、db.collection.createIndex() を使用します。
db.collection.createIndex( <key and index type specification>, <options> )
.NET ドライバーを使用してインデックスを作成するには、MongoCollection.CreateIndex を使用します。
collection.CreateIndex( IndexKeys<collection>.<key and index type specification>, <options> );
非同期 Java ドライバーを使用してインデックスを作成するには、com.mongodb.async.client.MongoCollection.createIndex を使用します。
collection.createIndex( <key and index type specification>, <options>, <callbackFunction>)
Java ドライバーを使用してインデックスを作成するには、com.mongodb.client.MongoCollection.createIndex を使用します。
collection.createIndex( <key and index type specification>, <options> )å
To create an index using the Motor driver, use motor.motor_asyncio.AsyncIOMotorCollection.create_index.
await db.collection.create_index([(<key and index type specification>)], <options> )
Node.JS ドライバーを使用してインデックスを作成するには、 createIndex()を使用します。
collection.createIndex( { <key and index type specification> }, function(err, result) { console.log(result); callback(result); } )
Perl ドライバー を使用してインデックスを作成するには、create_one() を使用します。
my $indexes = $db->get_collection( <collection> )->indexes; $indexes->create_one( [ <key and index type specification> ] );
To create an index using the PHP driver, use MongoDB\\Collection::createIndex().
$collection->createIndex(<key and index type specification>, <options>);
Python ドライバを使ってインデックスを作成するには、pymongo.collection.create_index メソッドを使います。
db.collection.create_index([(<key and index type specification>)], <options> )
Ruby ドライバー を使用してインデックスを作成するには、Mongo::Index::View#create_one を使用します。
client[:collection].indexes.create_one({ <key and index type specification> }, {options})
Scala ドライバーを使用してインデックスを作成するには、org.mongodb.scala.model.Indexes を使用します。
collection.createIndex(<key and index type specification>)
例
この例では、name フィールドに単一キーの昇順インデックスを作成します。
db.collection.createIndex( { name: 1 } )
この例では、name フィールドに単一キーの昇順インデックスを作成します。
collection.CreateIndex( IndexKeys<collection>.Ascending("name") );
この例では、name フィールドに単一キーの昇順インデックスを作成します。
collection.createIndex(Indexes.ascending("name"), someCallbackFunction());
この例では、name フィールドに単一キーの昇順インデックスを作成します。
collection.createIndex(Indexes.ascending("name"));
この例では、name フィールドに単一キーの昇順インデックスを作成します。
await collection.create_index([("name", pymongo.ASCENDING)])
この例では、name フィールドに単一キーの昇順インデックスを作成します。
collection.createIndex( { name : 1 }, function(err, result) { console.log(result); callback(result); } )
この例では、name フィールドに単一キーの昇順インデックスを作成します。
my $indexes = $db->get_collection( <collection> )->indexes; $indexes->create_one( [ name => 1 ] );
この例では、name フィールドに単一キーの昇順インデックスを作成します。
$collection->createIndex(['name' => 1]);
この例では、name フィールドに単一キーの昇順インデックスを作成します。
collection.create_index([("name", pymongo.ASCENDING)])
この例では、name フィールドに単一キーの昇順インデックスを作成します。
client[:collection].indexes.create_one({ name: 1 })
この例では、name フィールドに単一キーの昇順インデックスを作成します。
collection.createIndex(ascending("name"))
結果
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 出力に含まれます。
ドライバーを使用して既存のインデックスの情報を表示するには、「ドライバーのドキュメント」を参照してください。
詳細
MongoDB Compass でインデックスを作成する方法については、Compass ドキュメントの「インデックスの管理」を参照してください。
インデックスが使用される頻度を確認するには、「インデックス使用状況の測定」を参照してください。
インデックスの名前を指定する方法については、「インデックス名の指定」を参照してください。
MongoDB がインデックスを構築する方法については、「インデックス構築プロセス」を参照してください。