Здесь есть две вещи, которые вы спрашиваете.
- Можем ли мы использовать индексы, которые должны быть более эффективными, чем динамические запросы?
- Если мы используем индексы .. тогда мы должны использовать Linq и цепочку?
Индексы
Как правильно сказал Мэтт Уоррен, вы не используете индексы в своем примере запроса. Прямо сейчас, с вашим примером запроса, RavenDb достаточно умен, чтобы создать временный (динамический) индекс. Если этот динамический индекс используется достаточно, он автоматически переводится в статический / постоянный индекс.
Итак ... вы должны использовать индексы? Если можешь, то да!
вот ваше утверждение снова, на этот раз с определенным индексом.
using(IDocumentSession session = _store.OpenSession())
{
MyDocument doc = session.Query<MyDocument>("ByProperty")
.Where(d => d.Property == value)
.Single();
}
В этом случае где-то был создан индекс с именем MyDocument_ByProperty
. Я не собираюсь объяснять детали индексов .. иди и прочитайте все о них здесь .
Линк и цепочка
(Не уверен, что это правильная терминология ...)
Если вы создаете оператор linq (который я делал выше) с OR без индекса .. запрос все еще генерируется .. который затем транслируется в HTTP-запрос RESTful к серверу RavenDB. Если у вас есть индекс ... тогда запрос достаточно умен, чтобы попросить его использовать. Никто? Затем сервер создаст динамический индекс. Это означает, что ему также придется сначала пройти процедуру индексации, а затем получить ваши результаты.
TL; DR;
Да, используйте индексы. Да, используйте цепочку Linq.