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