C# RavenDB查询总是比加载速度快

C# RavenDB查询总是比加载速度快,c#,asp.net,ravendb,C#,Asp.net,Ravendb,在RavenDB站点上,当您知道文档Id时,它会说使用loadoverquery。在我对大约1500个对象的简单集合进行的测试中,加载总是比较慢。为什么? 负载: 质疑 在检索每个文档的测试中,平均查询时间为66毫秒,而负载为137毫秒。RavenDB实例位于另一个办公室中,因此是high times。不管怎样,加载不应该总是更快吗 编辑 这就是我所指的声明。提示4。有错吗?据我所知,如果数据库中存在id,Load将保证返回结果,而如果索引尚未更新,则Query可能不会返回结果 您可能会遇到这样

在RavenDB站点上,当您知道文档Id时,它会说使用loadoverquery。在我对大约1500个对象的简单集合进行的测试中,加载总是比较慢。为什么?

负载:

质疑

在检索每个文档的测试中,平均查询时间为66毫秒,而负载为137毫秒。RavenDB实例位于另一个办公室中,因此是high times。不管怎样,加载不应该总是更快吗

编辑


这就是我所指的声明。提示4。有错吗?

据我所知,如果数据库中存在id,Load将保证返回结果,而如果索引尚未更新,则Query可能不会返回结果

您可能会遇到这样一种情况,即插入一条记录,然后在下一行尝试使用Query检索同一条记录,然后不返回任何内容。在这种情况下,Load将返回一条记录


因此,我猜您看到的性能下降可能与以下事实有关:在使用查询时,您正在按索引进行查询,而负载正在影响实际的数据存储。

据我所知,如果数据库中存在id,Load将保证返回结果,而如果索引尚未更新,则查询可能不会返回结果

您可能会遇到这样一种情况,即插入一条记录,然后在下一行尝试使用Query检索同一条记录,然后不返回任何内容。在这种情况下,Load将返回一条记录


因此,我猜想您看到的性能下降可能与以下事实有关:在使用查询时,您正在按索引进行查询,而Load正在访问实际的数据存储。

在按项Id检索项时,您需要使用.Loadid方法

加载是一个兼容的操作。它直接从文档存储中检索文档

查询是最终一致的操作。它首先根据索引查找文档存储中的文档,然后返回它们。如果文档刚刚添加且尚未编制索引,则通过Id进行查询可能会返回null


RavenDB 2.0添加了一个功能,以防止您按Id进行查询。如果您尝试这样做,它将引发异常。因此,使用Load不仅是一种最佳实践,也是一项要求。

当通过项目Id检索项目时,需要使用.Loadid方法

加载是一个兼容的操作。它直接从文档存储中检索文档

查询是最终一致的操作。它首先根据索引查找文档存储中的文档,然后返回它们。如果文档刚刚添加且尚未编制索引,则通过Id进行查询可能会返回null


RavenDB 2.0添加了一个功能,以防止您按Id进行查询。如果您尝试这样做,它将引发异常。因此,使用Load不仅仅是一种最佳实践,这是一项要求。

你的回答有道理,这是我的假设,但RavenDB网站上的“知道文档Id时使用加载查询”让我相信我做错了什么。你的回答有道理,这是我的假设,但RavenDB网站上的“知道文档Id时使用加载查询”让我相信我做错了做错事。RavenDB 2.0+将不允许您查询id。因此,这不仅是最佳做法,也是一项要求。@MattJohnson如果您想将其添加为答案,我将选择它。我确实想过删除这个问题,但显然其他人也有同样的问题。也许这并没有被完整地记录下来。无论如何,RavenDB 2.0+将不允许您查询id。因此,这不仅是一种最佳做法,也是一项要求。@MattJohnson如果您想将其添加为答案,我将选择它。我确实想过删除这个问题,但显然其他人也有同样的问题。也许这并没有被完整地记录下来。无论如何
var doc = session.Load<Document>("Documents/123");
var doc = session.Query<Document>().Where(x => x.Id == "123").SingleOrDefault();