2

我的 Db4o 数据库中有 7000 个对象。

当我检索所有对象时,它几乎是即时的。当我添加一个 where 约束,即 Name = "Chris" 时,它需要 6-8 秒。

这是怎么回事?

此外,我还看到了一些关于使用 Lucene 进行搜索类型查询的评论是否有人对此有任何好的链接?

4

2 回答 2

2

有两件事要检查。

  1. 您是否添加了“Db4objects.Db4o.NativeQueries”-程序集?如果没有此程序集,则无法优化本机查询
  2. 是否在代表名称的字段上设置了索引?索引应该使查询更快索引:

    cfg.Common.ObjectClass(typeof(YourObject)).ObjectField("fieldName").Indexed(true);
    
于 2010-02-08T21:44:44.293 回答
2

这个问题有点老了,但也许这有什么用:

使用本机查询时,请尝试在 lambda 表达式上设置断点。如果实际调用了断点,那么您就会遇到麻烦,因为优化失败了。要调用 lambda,必须实例化每个对象,这非常昂贵。

如果优化成功,将分析 lambda 表达式树并且不需要实际代码,因此不会触发断点。

另请注意,必须在打开连接之前执行字段的设置索引。

最后,我有一个简单对象的测试用例。GenericReflector当我在没有查询优化和索引的情况下开始时(更糟糕的是,使用由于我未能提供模型 .dll而被迫使用的服务器),对于大约 100,000 个对象的三标准查询来说,它也需要 600 秒。现在,对 250 万个对象的相同查询需要 6 秒,因此确实有巨大的收益。

于 2010-02-24T01:00:11.120 回答