時系列インデックス
時系列コレクションのインデックスは、通常、一般的なコレクションのインデックスのように動作しますが、いくつかの考慮事項と制限があります。
時系列コレクションに セカンダリインデックスがあり、機能の互換性バージョン(fCV)をダウングレードする必要がある場合は、ダウングレードされる fCV と互換性のないセカンダリインデックスを最初に削除する必要があります。詳細については、 setFeatureCompatibilityVersion
を参照してください。
バージョン 6.0 以降、時系列コレクション内の任意のフィールドにセカンダリインデックスを追加できます。MongoDB は、個々のドキュメントではなく、ドキュメントのバケット単位で時系列コレクションをインデックス化します。時系列バケットには、共有された metaField 値を持つドキュメントが含まれ、近い timeField 値の順に並べられます。MongoDB は、metaField を除くすべてのフィールドの最小値と最大値をインデックス化します。個々の文書の代わりにバケットをインデックス化することで、インデックスサイズを縮小し、クエリの効率を向上させます。
Tip
クエリのパフォーマンスを向上させるために、時系列コレクションの任意のフィールドに手動でセカンダリインデックスを追加できます。
クラスター化されたコレクション
デフォルトでは、MongoDB はバケット時間に基づいて時系列コレクションをクラスター化します。
複合インデックス
バージョン 6.3 で追加。
MongoDB 6.3 以降、MongoDB は時系列コレクションの metaField と timeField の両方にデフォルトの複合インデックスを作成します。MongoDB はこのインデックスを使用して、クエリの性能と速度を向上させます。
timeField
、metaField
、または測定フィールドに複合インデックスを追加できます。
部分インデックス
バージョン 6.0 で追加。
MongoDB6.0 以降、時系列コレクションで演算子 $or
、$in
、および $geoWithin
を部分インデックスと合わせて使用できます。
metaField および timeField では部分インデックスを作成できません。
TTL Indexes
バージョン 6.3 で追加。
MongoDB 6.3 以降、metaField のみに依存する partialFilterExpression
を使用して TTL インデックスを作成できます。6.3 より前のバージョンでは、expireAfterSeconds
パラメータに基づいて TTL インデックスのみを作成できます。
時系列コレクションでドキュメントを期限切れにするために expireAfterSeconds
オプションを使用していない場合、部分的な TTL インデックスを作成すると、一致するドキュメントだけに有効期限が設定されます。コレクションですべてのドキュメントに expireAfterSeconds
が使用されている場合は、部分的な TTL インデックスを使用して一致するドキュメントをより早く期限切れにすることができます。
禁止されているインデックス
MongoDB では、時系列コレクションで次のインデックス型は許可されません。
metaField にスパース インデックスを作成することはできません。
インデックス作成のベストプラクティス
フィルタリングと等価性のために metaField インデックスを使用する。
範囲クエリには timeField やその他のインデックス付きフィールドを使用する。
一般的なインデックス戦略は、時系列コレクションにも適用される。詳細については、「インデックス戦略」を参照。
詳細と例については、時系列コレクションへのセカンダリインデックスの追加を参照してください。