на один и тот же запрос?
Есть коллекция в боевой базе, делаю с неё дамп, ресторю на локальный монгод в докере вместе с индексами (версия сервера та же, отличаются тем что локально один сервер, а в боевой есть репликация).
Делаю два одинаковых запроса в боевую и локальную, по логам видно что используются разные IXSCAN.
В обоих случаях составные индексы. Просто в одном случае он обходит n документов, в другом 10*n
В момент когда в первый раз выполняется запрос по шейпу, который не находится в кеше планов, монга пытается предсказать сколько времени и ресурсов займёт по каждому из подходящих под этот шейп планов, выполняя тестовую выборку. Какой план будет дешевле, тот и победит и попадёт в кеш. Почему выйграл один план, но проиграл другой сказать сложно. Причин много, начиная от нагрузки в момент выполнения тестовых выборок, заканчивая количеством попавших в неё документов. Если вы хотите чтоб монга выбирала конкретный индекс, то используйте hint
Обсуждают сегодня