如何有效地从索引字段上排序的db40中检索第n个对象

本文关键字:检索 db40 对象 排序 有效地 索引 字段 | 更新日期: 2023-09-27 18:06:45

我在一个db40db中存储了很多事件。这些事件都有时间戳,而且我已经索引了字段。按时间戳排序检索所有事件(枚举器)几乎不需要花费任何时间(因为它们没有被激活)。但是,如果我只想每10年退休一次呢?我可以循环,但是我需要计数,这需要很长时间。即使从Enumerable返回FirstOrDefault()(是的,我在c#和LINQ中)也需要时间。如果字段被索引了,那么在有序集合中找到第一个字段不是很容易吗?

是的,我没有很多使用db40的经验,但是我写的应用程序工作得很好。通常,我将数百万个事件推入数据库,然后根据较短的时间范围检索一些事件。完全没有问题,应用程序运行得非常好。典型查询的响应时间小于100毫秒。

现在我想检索所有事件的样本。每隔十年左右……我该怎么做呢?

如何有效地从索引字段上排序的db40中检索第n个对象

你知道你在用LINQ吗?你确定查询不需要花费时间吗?因为LINQ查询是在开始迭代时执行的。以前不是。

还要注意db40现在不使用索引进行排序。这意味着对于巨大的结果集排序将会很慢。

FirstOrDefault()已经花费了很多时间?可能有两个原因。要么是因为在那里执行查询而花费时间。或者是因为db40需要时间来激活对象。它是一个非常复杂的物体吗?我的猜测是查询时间可能是问题所在,因为您说过. count()操作占用了它的时间。

现在您希望每10个对象获得一次。我相信. elementat()运算符还没有以db40的优化形式实现。这意味着它会激活中间的所有物体。在最新的db40版本中,. skip()操作不应该激活中间的每个对象。因此,您可以跳到正确的位置并在那里使用. firstordefault()。