2012-03-14 15 views
3

私はこれが起こっている理由を理解しようとしています:MongoDBの制限()とソート()の最適化

db.items.find({uid: {$in:[34, 54, 53,1,2,3,5,6,7]} }).limit(40).sort({_id:-1}).explain() 

は私を返します。しかし

"cursor" : "BtreeCursor _id_-1_uid_1 multi", 
"nscanned" : 167, 
"nscannedObjects" : 40, 
"n" : 40, 
... 

、ソート

db.items.find({uid: {$in:[34, 54, 53,1,2,3,5,6,7]} }).limit(40).explain() 
なし

返品:

"cursor" : "BtreeCursor uid_1 multi", 
"nscanned" : 40, 
"nscannedObjects" : 40, 
"n" : 40, 
... 

だから私が得ないのは、ソートを追加すると、それはより多くのドキュメントをスキャンするのですか?私はidでソートしています。また、このインデックスを使って " _id_-1_uid_1"を改善しようとしていますが、まだ多くのドキュメントをスキャンしています。

これはローカルデータベースなので、私の場合は大きな問題です。しかし、少数のドキュメントがスキャンされていますが、私のライブサイトでは何百ものドキュメントがスキャンされていますそうです。

誰も私に何が起こっているのか説明できますか?現時点では

+0

?おそらく{uid:1、id:-1}を試してみてください... –

+0

{uid:1、id:-1}と{id:-1、uid:1}の両方のインデックスを試しました!成功しませんでした。 –

答えて

関連する問題