私のコレクションには10Mのドキュメントがあり、movieIdという名前のフィールドがあります。ドキュメントでは、この構造を有する:MongoDB一致インデックスvsインデックスなし - 集約
{
"_id" : ObjectId("589bed43e3d78e89bfd9b779"),
"userId" : 1,
"movieId" : 122,
"rating" : 5,
"timestamp" : 838985046,
"newId" : 0.0
}
- MOVIEIDは1から7000の間の数です。
- 私はこのコレクションの2つのバージョンを持っています(重複しています)。一つ目はMOVIEID以上のインデックスを持つ:
db.collection.createIndex({movieId:1});
- 他のバージョンでは、このインデックスを持っていません。 1(
db.collection.aggregate( [{ $match:{"movieId":{$lte:VarSize}} }]);`
私はこのクエリのパフォーマンスを比較していますが、
VarSize
が少ないときには、インデックスを持つコレクションを照会することは速いです:
私は、次のクエリを(VarSizeは単なる変数です)実行しています-2秒)、索引なしでコレクションに照会するには14秒かかります。しかし、VarSize
が1000より大きい場合、索引付けされたコレクションを照会することは、索引付けされていないコレクションよりも遅くなります。インデックス付きコレクションのクエリに2倍の時間がかかります。
更新#1:
更新#2:
"のtoArrayは" VarSizeが大きくなっている間に増加する値を得るために私を助けました。それがなければ、戻り値は単なるカーソルだと私は思う。
「movieId」というフィールドが1つしかないドキュメントはありますか? '_id'フィールドはどうでしょうか? –
コレクションのサンプルドキュメントを表示して、インデックスが何であるかを正確に確認できますか? –
@SergeyBerezovskiyはい_idフィールドがありますが、他の多くのフィールドでもクエリの実行に問題はないと思います。 –