インデックスの概要

Cloud Firestore Enterprise エディションにのみ関連します。

このページでは、MongoDB 互換の Cloud Firestore のインデックス作成について説明します。MongoDB 互換の Cloud Firestore では、デフォルトでインデックスは作成されません。データベースのパフォーマンスを向上させるには、最もよく使用されるクエリのインデックスを作成します。

インデックスは、データベースのパフォーマンスに大きな影響を与えます。クエリのインデックスが存在する場合、データベースはスキャンする必要があるデータ量を減らし、結果の並べ替えに必要な作業を減らすことで、効率的に結果を返すことができます。ただし、インデックス エントリはストレージ コストと、インデックス付きフィールドに対する書き込みオペレーション中に実行される作業量を増やします。

インデックスの定義と構造

インデックスは次の要素で構成されます。

  • コレクション ID
  • 指定されたコレクション内のフィールドのリスト
  • 各フィールドの順序(昇順または降順)

インデックスでは、スパース オプションとマルチキー オプションを有効にすることもできます。

インデックスの順序

各フィールドの順序と並べ替えの方向によって、インデックスが一意に定義されます。たとえば、次のインデックスは 2 つの異なるインデックスであり、相互に交換できません。

コレクション フィールド
cities country(昇順)、population(降順)
cities population(降順)、country(昇順)、

クエリをサポートするインデックスを作成する場合は、クエリと同じ順序でフィールドを含めます。

インデックス密度

デフォルトでは、インデックス エントリにはコレクション内のすべてのドキュメントのデータが格納されます。これは、非スパース インデックスと呼ばれます。ドキュメントにインデックスで指定されたフィールドが含まれているかどうかに関係なく、ドキュメントのインデックス エントリが追加されます。存在しないフィールドは、インデックス エントリの生成時に null 値を持つものとして扱われます。この動作を変更するには、インデックスをスパース インデックスとして定義します。

スパース インデックス

スパース インデックスは、インデックス付きフィールドの少なくとも 1 つに値(null を含む)を含んでいるコレクション内のドキュメントのみをインデックスに登録します。スパース インデックスを使用すると、ストレージ コストが削減され、パフォーマンスが向上する場合があります。

配列値のマルチキー インデックス

配列値を含むフィールドにインデックスを作成する場合は、マルチキー インデックスを作成する必要があります。通常のインデックスでは、配列値をインデックス登録できません。マルチキー インデックスは、インデックス定義で最大 1 つの配列フィールドをサポートし、配列値をトラバースするオペレーションに使用できます。

マルチキー インデックスは、配列値をインデックスに登録する必要があることがわかっている場合にのみ使用してください。 通常のインデックスは、クエリの処理時にメリットがあります。たとえば、通常のインデックスは範囲内の値をより効率的にフィルタできます。

配列値とマルチキー インデックスを操作すると、次の状況でエラーが発生します。

  • オペレーションが、通常のインデックスでインデックス登録されたフィールドに配列値を追加しようとしています。配列値を追加するには、そのフィールドの既存の通常のインデックスを削除し、マルチキー インデックスとして再作成する必要があります。
  • 配列値を含むフィールドに通常のインデックスを作成しようとしています。マルチキー インデックスを作成するか、配列値を削除する必要があります。
  • オペレーションが配列値を持つ複数のフィールドのインデックス登録を試行しています。マルチキー インデックスに配列値を持つフィールドを複数含めることはできません。続行するには、データモデルまたはインデックス定義を変更します。
  • 2 つのフィールド パスが users.postsusers.zip などの共通の接頭辞を共有するマルチキー インデックスを作成しようとしています。

インデックス構築エラーのトラブルシューティング

インデックスを管理するときに、インデックス構築エラーが発生することがあります。データベースがデータで問題を検出すると、インデックス作成オペレーションに失敗する可能性があります。 インデックス登録オペレーションは、次の理由で失敗することがあります。

  • インデックスの上限に達しました。たとえば、オペレーションでドキュメントあたりの最大インデックス エントリ数に達した可能性があります。インデックスの作成に失敗すると、エラー メッセージが表示されます。インデックスの上限に達していない場合は、インデックス オペレーションを再試行します。
  • マルチキー インデックスが必要です。インデックス付きフィールドの少なくとも 1 つに配列値が含まれています。続行するには、マルチキー インデックスを使用するか、配列値を削除する必要があります。
  • オペレーションが配列値を持つ複数のフィールドのインデックス登録を試行しています。マルチキー インデックスに配列値を持つフィールドを複数含めることはできません。続行するには、データモデルまたはインデックス定義を変更します。

次のステップ