В MongoDB я делаю запрос geonear для коллекции, содержащей ~ 3,5 миллиона объектов, чтобы вернуть результаты около определенного широты / долготы. Этот запрос отлично работает, если у меня есть базовый 2d-индекс для объекта:
db.Listing.ensureIndex( { Coordinates: "2d" } );
Однако теперь я также хочу фильтровать по другим полям (Цена, Тип недвижимости, Год постройки, Кровати, Ванны и т. Д.) В запросе geonear. Когда я добавляю в запрос такие вещи, как Price <= 10000000, тогда запрос начинает замедляться. У меня нет никаких индексов по этим другим полям, поэтому мне интересно, какой лучший подход с точки зрения производительности. </p>
Я пытался добавить отдельные индексы для каждого из других полей (всего 11 индексов в коллекции), однако это приводило к истечению времени ожидания запроса каждый раз, я думаю, потому что коллекция может обрабатывать только столько индексов?
db.Listing.ensureIndex( { Coordinates: "2d" } );
db.Listing.ensureIndex( { Price: 1 } );
db.Listing.ensureIndex( { Beds: 1 } );
db.Listing.ensureIndex( { Baths: 1 } );
etc...
Теперь я подумываю о наличии только одного составного индекса в коллекции:
db.Listing.ensureIndex( { Coordinates: "2d", Price: 1, PropertyType: 1, YearBuilt: 1, Beds: 1, Baths: 1, HouseSize: 1, LotSize: 1, Stories: 1 } );
Это правильный подход или есть лучший способ?