У меня есть коллекция в MongoDB с 1,7 миллионами документов размером в 6 КБ в среднем на каждый документ. База данных находится на разумной машине, с 6 ГБ ОЗУ и 4 ядрами
Эта коллекция имеет индекс для поддержки моих запросов. Этот индекс имеет атрибуты ниже (String, String и Date) и имеет размер всего 15 МБ. (Проверено в MongoDB Compass)
{
"Unit" : 1.0,
"VendorCode" : 1.0,
"EmissionDate" : 1.0
}
Однако, когда я запускаю следующий запрос к коллекции, для возврата требуется много времени.
db.Collection.find({
'Unit': '016406',
'EmissionDate': {$gte: new ISODate('2018-08-01')}
}, {
'Unit': 1,
'VendorCode': 1,
'EmissionDate': 1
})
По моему опыту работы с базами данных SQL такой запрос поверх индекса такого размера мгновенно возвращался бы. Однако, когда я запускаю его на MongoDB, через оболочку на машине или Robo3T, это занимает больше 10 минут!
Мне кажется, что когда запрос находит документы, Монго по какой-то причине извлекает их из хранилища. Но это только предположение.
Я забыл принять во внимание некоторые базовые лучшие практики с MongoDB? Какие идеи вы могли бы дать мне, чтобы исследовать эту проблему?