Требуется оптимизация для запросов к базе данных моего приложения Heroku: MongoDB, размещенная на Mongolab, содержит 2 миллиона документов (3,5 ГБ и более), теперь этот единственный запрос занимает в среднем 2,3 секунды, а Heroku возвращает тайм-ауты после 200 одновременных пользователи используют приложение.
Как оптимизировать этот запрос? Влияет ли порядок заполнения, сортировки и ограничения на производительность, можно ли их упорядочить по-разному? Вывод должен быть таким же, если перед заполнением происходит ограничение 100, как это можно сделать в этом коде?
Монголаб говорит, что с существующими индексами все в порядке, поэтому есть ли что-то сделать для самого кода?
findcustomermydataResults = async (
league: ILeague,
user: IUser,
minwp: number,
maxwp: number
): Promise<ImydataResult[]> => {
try {
const mydataResultsInRange = await mydataresult.find(
{
league: league._id,
wp: { $gte: minwp, $lte: maxwp },
user: { $ne: user._id },
},
{ user: 1, id: 1, wp: 1, mydata: 1, time: 1, createdAt: 1 }
)
.populate({
path: "user",
select: ["displayName", "country", "cargo", "customId", "chea"],
})
.sort({ createdAt: -1 })
.limit(100);
this.debug(
`findcustomermydataResults() - found: ${
mydataResultsInRange.length
} mydata results`
);
return mydataResultsInRange;
} catch (err) {
this.error(`findcustomermydataResults() - try catch error: ${err}`);
return null;
}