Медленные результаты пейджинга по текстовому запросу с пропуском

У меня есть коллекция с 60000000 записей. При выполнении этого запроса требуется 5 мин.

 collection.Find(f => f.EVN_EVT_PRS_FIRST_NAME.EndsWith("yasmine"))
   .SortBy(o=>o.EVN_EVT_PRS_FIRST_NAME).Skip(1600000).Limit(20).ToList();

Производит:

[ 
    { $match: { $text: { $search: \"sharma\" } } },
    { $skip: 160000 },
    { $limit: 20 },
    { $sort : { EVN_EVT_PRS_FIRST_NAME : -1 } }
]

этот запрос занимает 6 минут

Есть ли способ получить данные быстрее.


person Sanjay Prakash    schedule 14.06.2018    source источник
comment
У вас есть индексы для EVN_EVT_PRS_FIRST_NAME?   -  person Danielle Summers    schedule 14.06.2018
comment
ЕСЛИ вы действительно можете это сделать, то единственное, что действительно может вас здесь спасти, - это подход к пейджингу на основе диапазона вместо skip, потому что это очень медленно. Единственный другой случай, который у вас есть, - это, вероятно, должна быть сегментированная коллекция такого размера и с ключом сегмента, который разумно распределял бы нагрузку. Для @DanielleSummers. это поиск $text, поэтому должен быть индекс, иначе запрос просто выдаст ошибку.   -  person Neil Lunn    schedule 14.06.2018
comment
И всегда приятно видеть, что люди действительно наблюдательны и голосуют за комментарий, который не заметил, что это текстовый поиск, где у вас нет другого выбора, кроме как иметь индекс. Вид говорит красноречивее всяких слов о качестве голосов здесь. Комментарий неуместен, как я только что уже заметил.   -  person Neil Lunn    schedule 14.06.2018
comment
@NeilLunn, я не смог найти ничего в документации, в которой бы прямо говорилось, что должен быть индекс для поиска $text, но я поверю вам на слово. Честно говоря, мы не занимаемся текстовым поиском, поэтому я отчасти стрелял в темноте со своим комментарием.   -  person Danielle Summers    schedule 14.06.2018