インデックスは、特定のフィールド値を持つドキュメントをすばやく検索するために使用されます。 インデックスがない場合、MySQL は最初のドキュメントで始まり、コレクション全体を読み取って関連するフィールドを検索する必要があります。 コレクションが大きいほど、このコストは高くなります。 コレクションが大きく、特定のフィールドに対するクエリーが一般的な場合は、ドキュメント内の特定のフィールドに対するインデックスの作成を検討してください。
たとえば、移入フィールドのインデックスを使用すると、次のクエリーのパフォーマンスが向上します:
mysql-py> db.countryinfo.find("demographics.Population < 100")
...[output removed]
8 documents in set (0.00 sec)
create_index()
メソッドは、使用するフィールドを指定する JSON ドキュメントで定義できるインデックスを作成します。 このセクションでは、インデックス付けの概要について説明します。 詳細は、Indexing Collections を参照してください。
一意でないインデックスを作成するには、インデックス名とインデックス情報を create_index()
メソッドに渡します。 重複するインデックス名は禁止されています。
次の例では、demographics
オブジェクトの Population
フィールドに対して定義され、Integer
数値としてインデックス付けされた popul
という名前のインデックスを指定します。 最後のパラメータは、フィールドに NOT NULL
制約が必要かどうかを示します。 値が false
の場合、フィールドには NULL
値を含めることができます。 インデックス情報は、インデックスに含める 1 つ以上のフィールドの詳細を含む JSON ドキュメントです。 各フィールド定義には、フィールドへの完全なドキュメントパスを含め、フィールドのタイプを指定する必要があります。
mysql-py> db.countryinfo.createIndex("popul", {fields:
[{field: '$.demographics.Population', type: 'INTEGER'}]})
ここでは、整数の数値を使用してインデックスが作成されます。 GeoJSON データで使用するオプションなど、さらにオプションを使用できます。 デフォルトタイプの 「index」 が適切であるため、ここでは省略されているインデックスのタイプを指定することもできます。
一意のインデックスを作成するには、インデックス名、インデックス定義およびインデックスタイプ 「unique」 を create_index()
メソッドに渡します。 この例は、国名 ("Name"
) に対して作成された一意のインデックスを示しています。これは、インデックス付けする countryinfo
コレクションの別の共通フィールドです。 インデックスフィールドの説明で、"TEXT(40)"
はインデックス付けする文字数を表し、"required": True
はフィールドがドキュメントに存在する必要があることを指定します。
mysql-py> db.countryinfo.create_index("name",
{"fields": [{"field": "$.Name", "type": "TEXT(40)", "required": True}], "unique": True})
インデックスを削除するには、削除するインデックスの名前を drop_index()
メソッドに渡します。 たとえば、次のように 「popul」 インデックスを削除できます:
mysql-py> db.countryinfo.drop_index("popul")
詳しくはIndexing Collectionsをご覧ください。
インデックスを定義する JSON ドキュメントの詳細は、Defining an Index を参照してください。
完全な構文の定義は、Collection Index Management Functions を参照してください。