この章では、MongoDBのインデックスについて紹介します。MYSQLと同様に、MongoDBもインデックスをサポートしています。違いは、MongoDBがJSON構造の任意のネストされたフィールドにインデックスを追加することができ、クエリの効率を向上させるという点です。
MongoDBのインデックスの種類
単一フィールドインデックス
MYSQLと同様に、単一フィールドにインデックスを作成します。
フォーマット:
db.collection.createIndex( { field_name: sorting_direction(1 or -1) } )
注意: sorting_direction 1 は昇順、-1 は降順を表します。
例1:
db.records.createIndex( { score: 1 } )
scoreフィールドのインデックスを作成します。
例2:
db.records.createIndex( { "location.state": 1 } )
ネストしたJSONフィールドlocation.stateのインデックスを作成します。
複合インデックス
MYSQLと同様に、複数のフィールドを組み合わせてインデックスを作成し、複合クエリのスピードを加速させることができます。
フォーマット:
db.collection.createIndex( { <field1>: <type>, <field2>: <type2>, ... } )
例:
db.products.createIndex( { "item": 1, "stock": 1 } )
itemフィールドとstockフィールドの複合インデックスを、どちらも昇順で作成します (1 は昇順を表します)。
テキストインデックス(全文検索インデックス)
テキストインデックス(text)は主に全文検索をサポートするために使用されます。
注意: コレクションは1つのテキストインデックスのみを許可しますが、テキストインデックスには複数のフィールドを含めることができます。
例:
db.stores.createIndex( { name: "text", description: "text" } )
nameとdescriptionフィールドのための全文検索インデックスを作成します。
注意: 詳細は、全文検索インデックスセクションを参照してください。
空間インデックス(GEO インデックス)
主に地理情報関連のクエリをサポートするために使用され、主に2つの種類のインデックス、2dsphereと2dをサポートしています。詳細については、地理空間クエリセクションを参照してください。
インデックスの削除
コレクション内のすべてのインデックスをリスト表示するには:
db.pets.getIndexes()
petsコレクションからcatIdxインデックスを削除するには:
db.pets.dropIndex( "catIdx" )