2010-02-07 65 views
2

我的Db4o数据库中有7000个对象。Db4o选择性能

当我检索所有这几乎是瞬间的对象.. ,当我加入其中限制,即名称=“克里斯”,就需要6-8秒。

发生了什么事?

另外我见过有关使用Lucene进行搜索类型查询的一些评论有没有人有任何好的链接呢?

+0

fyi这发生在使用本机查询 – 2010-02-07 12:03:43

回答

2

有两件事要检查。

  1. 您是否添加了'Db4objects.Db4o.NativeQueries'-assembly?没有这个组装,一个native query cannot be optimized
  2. 已设置索引on the field它代表名称? A股指数应该使查询速度快了很多 指数:

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

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

当使用原生查询,尝试设置一个断点lambda表达式。如果断点实际被调用,则由于优化失败而遇到麻烦。要调用lambda,每个对象都必须实例化,这非常昂贵。

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

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

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