MongoDBのインデックスの使用方法
MongoDBのインデックスは、データベースクエリのパフォーマンスを最適化するために使用されるツールです。インデックスはMongoDBがデータの高速な特定とアクセスを可能にし、クエリの時間とリソースの消費を削減します。
MongoDBのインデックス使用における共通の手法とテクニックをご紹介します
- コレクションでインデックスを作成する: createIndex() メソッドではコレクションにインデックスを作成できます。たとえば、”age”という名前のインデックスを作成するには: db.collection.createIndex({ age: 1 })。これにより、”age” フィールドに対して昇順インデックスが作成されます。
- インデックスの確認:getIndexes() メソッドを使用して、コレクション内のすべてのインデックスを確認できます。たとえば、コレクション内のすべてのインデックスを確認するには、`db.collection.getIndexes()` を使用します。
- インデックスの削除: dropIndex()メソッドを使用してコレクションのインデックスを削除できます。たとえば、「age」という名前のインデックスを削除する場合は: db.collection.dropIndex({ age: 1 })。
- 复合索引:可以在多个字段上创建复合索引,以优化多字段查询的性能。例如,创建在”name”和”age”字段上的复合索引:db.collection.createIndex({ name: 1, age: 1 })。
- インデックスのソート: クエリ要求に基づいて、昇順または降順のソートをインデックスに指定できます。たとえば、”name”フィールドに降順インデックスを作成するには、db.collection.createIndex({ name: -1 })を使用します。
- 部分インデックス: 特定の条件を満たすドキュメントのみを対象とした部分インデックスを作成して、インデックスのサイズとメモリ使用量を削減できます。たとえば、”age” フィールドに対して、年齢が 18 歳以上のドキュメントのみを対象とした部分インデックスを作成する場合: db.collection.createIndex({ age: 1 }, { partialFilterExpression: { age: { $gte: 18 } } })。
- インデックス指定の方法としてhint()メソッドを使用して、 クエリで使用するインデックスを指定できます。 たとえば、「age」という名前のインデックスを使用する場合: db.collection.find({ age: 25 }).hint({ age: 1 })
- カバリングインデックス:クエリでインデックス内のデータだけで済み、元のドキュメントにアクセスする必要がない場合は、カバリングインデックスを利用してクエリのパフォーマンスを向上させることができます。カバリングインデックスにはクエリに必要なフィールドのみが含まれており、完全なドキュメントデータは含まれません。
インデックスは検索性能を高める一方で、書き込み時のオーバーヘッドや、ストレージスペースの消費が増大するという点に注意する必要がある。そのため、インデックス作成時には検索性能とストレージオーバーヘッドのトレードオフを考慮し、実際に応じて調整や最適化を行う必要がある。