MongoDB Query отнимает 2 минуты на сканирование 20 тыс. Записей - PullRequest
0 голосов
/ 05 марта 2019

Helo,

У меня есть коллекция mongodb, содержащая около 20 000 документов.Удаленные документы также хранятся в коллекции, что означает, что они «мягко» удалены.

Теперь я хочу запросить документы на основе ключа состояния.Статус может быть «открыт», «закрыт» или «удален».Мне нужны записи со статусом «закрыто»

. Я вижу, что количество документов, удовлетворяющих моим критериям, составляет только 25.Тем не менее, отсканированные документы (после применения индекса) имеют размер 18 тыс.

Следовательно, выполнение моего запроса занимает около 2 минут, а время ожидания истекает.

Мои первые вопросы: 1. Должен ли запрос, выполняемый для документов размером 20 тыс., Занимать так много времени?20к не такой большой счет, верно?2. Может ли кто-нибудь помочь мне с дальнейшей оптимизацией запроса, если это возможно?Помещение удаленных записей в отдельную коллекцию архивов - последнее, что я хотел бы сделать.

Вот мой текущий запрос:

**

db.collectionname.find({$and: [{ $and: [{ status: {$ne: 'open'} },{ status: {$ne: 'deleted'} }] }, 
							{ 'submittedDate': { $gte: new Date("2019-02-01T00:00:00.000Z"), $lte: new Date("2019-02-02T00:00:00.000Z") } }
						 ] })

**

1 Ответ

0 голосов
/ 05 марта 2019

Вы должны иметь индекс одного поля как {status: 1}. Замените индекс составным индексом {status: 1, submittedDate: 1}, чтобы улучшить вашу производительность. 20k - ничто, если правильно проиндексировано. Если у вас только 3 статуса, замените ваш запрос следующим образом.

db.collectionname.find({status: 'closed',
    'submittedDate': { $gte: new Date("2019-02-01T00:00:00.000Z"), 
            $lte: new Date("2019-02-02T00:00:00.000Z") }})
...