1

私は次のようなmongodbコレクションを持っています

collection {
   X: 1,
   Y: 2,
   Z: 3,
   T_update: 123,
   T_publish: 243,
   T_insert: 342
}

次のようなインデックスを作成する必要があります

{X: 1, Y: 1, Z: 1, T_update: 1}
{X: 1, Y: 1, Z: 1, T_publish: 1}
{X: 1, Y: 1, Z: 1, T_insert: 1}

しかし、私が見ているのは、値X:1、Y:1、Z:1は冗長性につながり、ソートに使用する予定の時間パラメーターのみが変更されていることです。上記のインデックスを作成して、3つの別々のインデックスを作成する必要がないようにするためのより良い方法はありますか?

また、私が次のようなインデックスを持っているかどうかを言います

{X: 1, Y: 1, Z: 1, T_update: 1}

そして、Mongoがx = 5、y =任意の値、Z = 4、sort = T_updateのような結果を返すようにしたいのですが、上記のインデックスが役立つか、次のようなインデックスを作成する必要があります。

{X:1, Z:1, T_update: 1},

私はそれを避けられることを願っています。

4

1 に答える 1

2

ここでの答えは、インデックスを作成するフィールドの選択性によって異なります。X、Y、または Z をフィルター処理するために使用する基準があまり選択的でない場合は、基本的に除外できます (またはフィールドの右側に移動できます)。複合キー)。

Y is not equal to 1 のようなフィルターを使用しているとします。ここで、1 はまれな値です。インデックスのほぼ全体を走査してほとんどの値を返し、データをスキャンするため、Y にインデックスを設定することは、最初に並べ替え用のインデックスを設定するよりもメリットが少なくなります。そのシナリオを考えると、T_Update でソートする場合は、次のようなインデックスを持つとおそらく有益でしょう{T_update: 1, Y : 1}

最後に、インデックスを作成する最も効率的な方法に関して、ここには非常に多くの順列があります。データ セットに最適なインデックスを見つける実際の方法は、explain()Hint()を使用して、特定のクエリ パターンとデータ セットでさまざまなインデックスをテストすることです。

于 2012-08-20T10:45:17.237 に答える