1

次のようなクエリを実行しています。

db.sales.find({location: "LLLA", 
               created_at: {$gt: ISODate('2012-07-27T00:00:00Z')}}).
         sort({created_at: -1}).limit(3)

このクエリは期待どおりに機能していますが、十分な速度で実行されていません。locationフィールドにインデックスがあり、created_atフィールドに別のインデックスがあります。より速くするために、ここで明らかな何かが欠けているのを見かけたら、私に知らせてください。

お時間をいただきありがとうございます。

4

2 に答える 2

1

Mongoは、特定のクエリに2つのインデックスを使用しません。フィルターlocationで並べ替えるcreated_at場合は、複合インデックスを追加できます。

db.sales.ensureIndex({location: 1, created_at: -1})

このexplainような問題が発生した場合は、クエリを実行する必要があります。特に並べ替えは、インデックス作成で直感的でない複雑さを引き起こし、explainコマンドによって理由が明らかになる場合があります。

また、通常は挿入時間を概算するために並べ替えることができることにも注意してください_id(自動生成されObjectIdた値を想定)が、追加のフィールドでフィルタリングしているため、この場合は複合インデックスほど役に立ちません。

于 2012-07-27T22:49:44.947 に答える
0

IDを使用するだけです。

db.sales.find({location: "LLLA"}).sort({_id: -1}).limit(3)
于 2012-07-27T22:35:39.410 に答える