Db4o选择性能

时间:2010-02-07 07:52:01

标签: db4o

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

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

发生了什么事?

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

2 个答案:

答案 0 :(得分:2)

有两件事要检查。

  1. 您是否添加了'Db4objects.Db4o.NativeQueries'组件?没有这个程序集,native query cannot be optimized
  2. 设置了代表名称的索引on the field?索引应该使查询更快  指数:

    cfg.Common.ObjectClass(typeof(YourObject)).ObjectField("fieldName").Indexed(true);
    

答案 1 :(得分:2)

这个问题有点陈旧,但也许这有用:

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

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

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

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