1. Twoje zapytania są zbyt skomplikowane. Używanie $elemMatch zbyt często.2nd:jeśli możesz dołączyć swój klucz shard w zapytaniu, drastycznie poprawi to szybkość.
Zamierzam zoptymalizować Twoje zapytania:
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()
Konkluzja jest taka:dołącz swój klucz odłamkowy za każdym razem, aby zaoszczędzić czas.
Może nawet zaoszczędzić czas na pętlę przez klucze fragmentów i wielokrotne wykonywanie tego samego zapytania.