1番目:クエリが非常に複雑です。 $ elemMatchを頻繁に使用します。2番目:シャードキーをクエリに含めることができれば、速度が大幅に向上します。
クエリを最適化します:
db.user.find({
createdAt: {
$gte: ISODate("2014-12-01"),
$lte: ISODate("2014-12-31")
}
}).explain()
db.user.find({
'transaction.product':'mobile'
}).explain()
db.user.find({
'transaction.product':'mobile',
firstTransaction:{
$in:[
ISODate("2015-01-01"),
ISODate("2015-01-02")
]
}
}).explain()
要点はこれです:毎回シャードキーを含めると時間の節約になります。
シャードキーをループして同じクエリを複数回実行する時間を節約できる場合もあります。