2013-12-13 4 views
1

У меня есть документMongoDB MongoEngine индекс декларация

class Store(Document): 
    store_id = IntField(required=True) 
    items = ListField(ReferenceField(Item, required=True)) 
    meta = { 
     'indexes': [ 
      { 
       'fields': ['campaign_id'], 
       'unique': True 
      }, 
      { 
       'fields': ['items'] 
      } 
     ] 
    } 

И хочу создать индексы в пунктах и ​​store_id, делает мою конфигурацию правильно?

ответ

1

Ваше второе объявление индекса похоже, что оно должно делать то, что вы хотите. Но чтобы убедиться, что индекс действительно эффективен, вы должны использовать explain. Подключитесь к своей базе данных с помощью оболочки mongo и выполните поиск-запрос, который должен использовать этот индекс, а затем .explain(). Пример:

db.yourCollection.find({items:"someItem"}).explain(); 

Выход будет документом с большим количеством полей. The documentation объясняет, что именно означает каждое поле. Обратите особое внимание на эти поля:

  • Миллис Время в миллисекундах требуется запрос
  • indexOnly (самообеспечение объяснения)
  • п число возвращаемых документов
  • nscannedObjects в количество объектов, которые нужно было исследовать без использования индекса. Для запроса только для индекса это должно быть равно n. Когда он выше, это означает, что некоторые документы не могут быть исключены индексом и должны сканироваться вручную.
+0

['indexOnly'] (http://docs.mongodb.org/manual/reference/method/cursor.explain/#explain.indexOnly) не является самоочевидным: он указывает на охваченный запрос. В этом специальном случае все поля в запросе ** и ** все поля в результате являются частью одного и того же индекса. – Stennie

Смежные вопросы