Я запускаю mapreduce, чтобы сгенерировать отчет об активности новостной рассылки.
Для запуска отчета по конкретной рассылке я использую:
var query = Query.And(
Query.EQ("NewsletterId", BsonInt32.Create(newsletterId)),
Query.GTE("DateAdded", BsonDateTime.Create(startDate)).LTE(BsonDateTime.Create(endDate))
);
Теперь я хочу иметь возможность получать сводный отчет об активности электронной почты по всем новостным рассылкам (используя тот же mapreduce, но просто меняя запрос). Для этого я использую:
var query = Query.And(
Query.Where(new BsonJavaScript("this.NewsletterId !== null")),
Query.GTE("DateAdded", BsonDateTime.Create(startDate)).LTE(BsonDateTime.Create(endDate))
);
У меня есть набор индексов, который включает в себя NewsletterId и DateAdded, которые, я думаю, используются в первом запросе, но не во втором, что приводит к его таймауту.
Какая-нибудь оптимизация, которую я могу сделать, чтобы предотвратить тайм-аут запроса?