我正在学习RavenDB而且我很困惑.据我所知,应该创建索引以获得真正有效的查询.但是,可以简单地进行LINQ查询,例如
using(IDocumentSession session = _store.OpenSession()) { MyDocument doc = session.Query() .Where(d => d.Property == value) .Single(); }
这种类型的查询工作得很好.但是,我从未为它创建过索引(当然,在进行查询时从不引用索引).
在使用RavenDB时,我应该使用这种查询吗?如果没有,为什么它甚至可以在API中使用?
这里有两件事要问你.
我们可以使用索引..假设比动态查询更有效?
如果我们使用索引..那么我们应该使用Linq和链接吗?
正如Matt Warren所说,你没有在样本查询中使用任何索引.现在,通过示例查询,RavenDb足够聪明,可以创建临时(动态)索引.如果足够使用该动态索引,则会将其自动提升为静态/ perminent索引.
那么..你应该使用索引吗?如果可以,那么是的!
这是你的陈述,这次是定义了一个索引.
using(IDocumentSession session = _store.OpenSession()) { MyDocument doc = session.Query("ByProperty") .Where(d => d.Property == value) .Single(); }
在这种情况下MyDocument_ByProperty
,在某处创建了一个名为的索引.我不打算解释索引的细节.. 去这里阅读所有关于它们的内容.
(不确定这是否是正确的术语......)
如果你用OR而不是索引创建一个linq语句(我在上面做过)..仍然会生成一个查询...然后将其转换为对RavenDB服务器的HTTP RESTful请求.如果你有一个索引..那么查询足够聪明,可以要求使用它.没有?然后服务器将创建一个动态索引..这意味着它还必须首先完成索引的动作,然后检索您的结果.
是使用索引.是的,使用Linq链接.
RavenDb支持.Net和Linq.
引擎盖下的Linq提供程序对ravendb服务器执行正常的REST调用,但是对于您来说,由于可以使用IQueryable
强类型类,因此更容易对其进行编码.
所以,是的,您可以使用linq/lambda在.Net envorinment中使用RavenDB.