インデックスの作成
インデックスは、MongoDB でクエリを効率的に実行するのに役立ちます。アプリケーションが同じフィールドに対して繰り返しクエリを実行する場合は、それらのフィールドにインデックスを作成して、クエリのパフォーマンスを向上させることができます。
インデックスを作成するには、 createIndex()
shell メソッドまたはドライバーの同等のメソッドを使用します。このページでは、MongoDB Shell とドライバーの例を示します。
このタスクについて
MongoDB シェルまたはドライバーでインデックス作成コマンドを実行すると、同じ仕様のインデックスが存在しない場合にのみ MongoDB はインデックスを作成します。
インデックスを使用するとクエリのパフォーマンスは向上しますが、インデックスを追加すると書込み操作の動作に悪影響が生じます。書込みと読み取りの比率が高いコレクションでは、挿入およびアップデートのたびにすべてのインデックスを更新する必要があるため、インデックスの使用コストは高くなります。
注意
インデックスのソート順
降順の単一フィールドインデックスを使用すると、インデックスのパフォーマンスに影響が及ぶ可能性があります。 最高のパフォーマンスを得るには、昇順の単一フィールド インデックスのみを使用してください。
手順
➤ このページの例の言語を設定するには、右側のナビゲーション ペインにある [言語の選択] ドロップダウン メニューを使用します。
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> )å
Motor ドライバーを使用してインデックスを作成するには、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> ] );
PHP ドライバーを使用してインデックスを作成するには、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"))
結果
mongosh
を使用して、インデックスの作成を監視できます。
現在ビルド中のインデックスを含め、コレクションに存在するインデックスを確認するには、db.collection.getIndexes()
メソッドを実行します。
db.collection.getIndexes()
[ { v: 2, key: { _id: 1 }, name: '_id_' }, { v: 2, key: { name: -1 }, name: 'name_-1' } ]
インデックスがビルド中かどうかを確認するには、$currentOp
集計ステージを使用して、データベースのアクティブな操作に関する情報を返します。 で$currentOp
mongosh
db.aggregate()
を実行するには、admin
データベースで メソッドを使用します。
次の集計パイプラインでは、$match
ステージを使用して、name
フィールドに降順インデックスを構築するアクティブな操作に関する情報を返します。
db.getSiblingDB("admin").aggregate( [ { $currentOp : {} }, { $match : {"command.createIndexes": { $exists: true } } } ] )
[ { type: 'op', host: 'mongodb.example.net:27017', desc: 'conn584', connectionId: 584, client: '104.30.134.189:12077', appName: 'mongosh 2.3.4', clientMetadata: { ... }, active: true, currentOpTime: '2024-12-05T16:13:35.571+00:00', effectiveUsers: [ { user: jane-doe, db: 'admin' } ], isFromUserConnection: true, threaded: true, opid: ..., lsid: { ... }, secs_running: Long('3'), microsecs_running: Long('3920881'), op: 'command', ns: 'example_db.collection', redacted: false, command: { createIndexes: 'collection', indexes: [ { name: 'name_-1', key: { name: -1 } } ], apiVersion: '1', lsid: { id: UUID('570931be-c692-4963-b9e2-1e279efd9702') }, '$clusterTime': { clusterTime: Timestamp({ t: 1733415063, i: 32 }), signature: { hash: Binary.createFromBase64('z0zaUHJ5SfhNQyvQLhocsKRFNbo=', 0), keyId: Long('7444956895695077380') } }, '$db': 'example_db' }, numYields: 0, queues: { ... }, currentQueue: null, locks: {}, waitingForLock: false, lockStats: { ... }, waitingForFlowControl: false, flowControlStats: { acquireCount: Long('3') } }, ... ]
ドライバーを使用して既存のインデックスに関する情報を表示するには、「 ドライバーのドキュメント 」を参照してください。
詳細
MongoDB Compass でインデックスを作成する方法については、Compass ドキュメントの「インデックスの管理」を参照してください。
インデックスが使用される頻度を確認するには、「インデックス使用状況の測定」を参照してください。
インデックスの名前を指定する方法については、「インデックス名の指定」を参照してください。
MongoDB がインデックスを構築する方法については、「インデックス構築プロセス」を参照してください。