これは基本的に、サイズNの10個のインデックスがサイズN * 10の1個のインデックスよりも効率的である場合に要約されます。純粋に読み取りを見る場合、個別のインデックスは常に高速であるはずです。関連するBツリーウォークでは、小さいキーセットなどを調べます。
ただし、考慮すべき点がいくつかあります:
- 配列フィールドのインデックスは、基本的に各配列要素に個別にインデックスを付けます。そのため、ルックアップオーバーヘッドは、bツリーウォーク中に最大で1〜2ステップ追加されますが、これはパフォーマンスへの影響はごくわずかです。言い換えれば、それらはほぼ同じくらい高速になります。
- 10個のインデックスがあるということは、更新/挿入ごとに複数のインデックスを更新する必要があることを意味する場合があります(インデックスがフィールドを共有するか、一度に複数のタイムスタンプを更新するかによって異なります)。これはパフォーマンスに関する重要な考慮事項です。
- 配列インデックスを使用すると、タイムスタンプ(Timestamp10など)を追加するのが少し簡単になります。
- データベースごとに使用できる名前空間の数には制限があり(24k)、各インデックスは1つを占めます。フィールドごとに個別のインデックスを作成すると、これが問題になる可能性があります。
- 最も重要なことは、配列インデックスがはるかに単純であり、コードを簡素化して保守性を向上させることです。パフォーマンスの違いが限られていることを考えると、これが配列インデックスをここに求める最も強い動機だと思います。