Docs Menu
Docs Home
/
MongoDB マニュアル
/ / /

metaField と timeField にセカンダリ インデックスを追加する

項目一覧

  • セカンダリインデックスを使用したソートのパフォーマンス向上
  • 時系列コレクションのインデックスヒントの指定
  • 時系列セカンダリインデックス

時系列コレクションのクエリ パフォーマンスを向上させるには、一般的な時系列クエリ パターンをサポートするために 1 つ以上のセカンダリ インデックスを追加します。 具体的には、 timeFieldおよびmetaFieldとして指定されたフィールドに 1 つ以上の複合インデックスを作成することをお勧めします。 metaFieldフィールドのフィールド値がドキュメントの場合には、そのドキュメント内のフィールドにセカンダリインデックスを作成できます。

注意

すべてのインデックス タイプがサポートされているわけではありません。 サポートされていないインデックス タイプのリストについては、「時系列コレクションのセカンダリインデックスの制限 」を参照してください。

たとえば、次のコマンドは、 フィールドと フィールドに 複合インデックスmetadata.sensorId timestampを作成します。

db.weather24h.createIndex({ "metadata.sensorId": 1, "timestamp": 1 })

Tip

次を参照してください。

timeFieldmetaFieldのソート操作では、それらのフィールドでセカンダリ インデックスを使用してパフォーマンスを向上させることができます。

たとえば、次のsensorDataコレクションには読み取った温度の値が含まれています。

db.sensorData.insertMany( [
{
"metadata": { "sensorId": 5578, "type": "temperature" },
"timestamp": ISODate("2022-01-15T00:00:00.000Z"),
"temperatureReading": 12
},
{
"metadata": { "sensorId": 5578, "type": "temperature" },
"timestamp": ISODate("2022-01-15T04:00:00.000Z"),
"temperatureReading": 11
},
{
"metadata": { "sensorId": 5579, "type": "temperature" },
"timestamp": ISODate("2022-01-15T08:00:00.000Z"),
"temperatureReading": 9
}
] )

次のコマンドを実行すると、 フィールドと フィールドに複合昇順のセカンダリtimestamp metadata.sensorIdインデックスが作成されます。

db.sensorData.createIndex(
{ "timestamp": 1, "metadata.sensorId": 1 }
)

timestampフィールドでの次のソート操作では、インデックスを使用してパフォーマンスを向上させます。

db.sensorData.find().sort( { "timestamp": 1 } )

ソート操作でインデックスが使用されたことを確認するには、 .explain()オプションを指定して操作を再度実行します。

db.sensorData.find().sort( { "timestamp": 1 } ).explain()

winningPlan.queryPlan.inputStage.stageIXSCANであり、これはインデックスが使用されたことを示します。 説明プランの出力の詳細については、「説明結果 」を参照してください。

インデックスのヒントにより、MongoDB はクエリに特定のインデックスを使用するようになります。 時系列コレクションに対する一部の操作では、ヒントでインデックスが指定されている場合にのみインデックスを利用できます。

たとえば、次のクエリでは、MongoDB はtimestamp_1_metadata.sensorId_1インデックスを使用します。

db.sensorData.find( { "metadata.sensorId": 5578 } ).hint( "timestamp_1_metadata.sensorId_1" )

時系列コレクションでは、インデックス名またはインデックス キー パターンのいずれかを使用してヒントを指定できます。 コレクションのインデックスの名前を取得するには、 db.collection.getIndexes()メソッドを使用します。

MongoDB 6.0以降(および5.0.16 )以降では、

注意

時系列コレクションセカンダリインデックスがあり、機能の互換性バージョン (fCV) をダウングレードする必要がある場合は、ダウングレードした fCV と互換性のないセカンダリインデックスを最初に削除する必要があります。setFeatureCompatibilityVersion を参照してください。

戻る

時系列データの粒度の設定