Помогает ли индексирование в проекции?
Я считаю, что единственный раз, когда это действительно поможет (определенную производительность и т.д.), если запрос «покрыт»: http://docs.mongodb.org/manual/tutorial/create-indexes-to-support-queries/
Так, например, если вы хотите запросить на {d:1, e:2}
и получить обратно {_id, t, e}
, вы могли бы сделать:
db.t.ensureIndex({d:1 , e:1, _id:1, t:1});
db.t.find({d:1, e:2}, {_id:1, t:1, e:1});
И explain()
выхода этого запроса был бы показать, как indexOnly
истинный смысл, что он никогда не загружен документов с диска, чтобы вернуть ответ.
Да, индексы могут помочь с проекцией при определенных обстоятельствах.
Я назначил коллекцию нескольким индексам и попытался выполнить поиск с сортировкой, а затем использовать пояснение, он показывает индекс BtreeCursor в отсортированном поле.
Да, так оно и есть.
Может быть, другие индексы помогли в части запроса, и объяснение просто не показало его, потому что оно показывает только последний индекс, который помог найти?
Если вы являетесь жертвой перекрестка индекса, тогда вы должны использовать explain(true)
, чтобы показать все используемые вами индексные планы.
Хорошо отметить, что отдельные индексы не используются для находки и сортировки с intersectioning, так что ответ здесь на самом деле нет: http://docs.mongodb.org/manual/core/index-intersection/#index-intersection-and-sort