MongoDB выполняет find()
операций очень медленно, когда я sort
или search
на non-indexed
полях. Когда в этих полях нет сортировки или поиска или эти операции выполняются над полями indexed
, query
выполняется очень быстро. Моя тестовая база данных содержит только 650 тыс. Документов (что не очень много), но итоговая база данных будет содержать 50 млн документов, растущих на 30 тыс. В день.
Это запрос, который выполняется быстро (менее 1 с), только фильтрацияв индексированных полях:
.find({
tipo_doc: 'nfe', //indexed field
id_empresa: 7 //indexed field
},
{
sort: {'data_requisicao': -1}, //indexed field
limit: 3000
});
И этот запрос выполняется очень медленно (30 с или более):
.find({
tipo_doc: 'nfe', //indexed field
id_empresa: 7, //indexed field
'transportador.xNome': 'A commom name' //not indexed field
},
{
sort: {'emitente.enderEmit.UF': -1}, //not indexed field
limit: 3000
});
Вот пример JSON
документа: https://pastebin.com/1EeaL9VL
Я провел много исследований, но, похоже, здесь ничего не работает .. Я делаю что-то не так, чтобы получить эту низкую производительность?
РЕДАКТИРОВАТЬ:
Как я уже сказал в своем комментарии, эти данные будут отображаться в HTML
table
, и каждый column
будет доступен для поиска и сортировки, поэтому я предполагаю, что не могу создать index
для каждого столбца ..