我的 Db4o 数据库中有 7000 个对象。
当我检索所有对象时,它几乎是即时的。当我添加一个 where 约束,即 Name = "Chris" 时,它需要 6-8 秒。
这是怎么回事?
此外,我还看到了一些关于使用 Lucene 进行搜索类型查询的评论是否有人对此有任何好的链接?
我的 Db4o 数据库中有 7000 个对象。
当我检索所有对象时,它几乎是即时的。当我添加一个 where 约束,即 Name = "Chris" 时,它需要 6-8 秒。
这是怎么回事?
此外,我还看到了一些关于使用 Lucene 进行搜索类型查询的评论是否有人对此有任何好的链接?
有两件事要检查。
是否在代表名称的字段上设置了索引?索引应该使查询更快索引:
cfg.Common.ObjectClass(typeof(YourObject)).ObjectField("fieldName").Indexed(true);
这个问题有点老了,但也许这有什么用:
使用本机查询时,请尝试在 lambda 表达式上设置断点。如果实际调用了断点,那么您就会遇到麻烦,因为优化失败了。要调用 lambda,必须实例化每个对象,这非常昂贵。
如果优化成功,将分析 lambda 表达式树并且不需要实际代码,因此不会触发断点。
另请注意,必须在打开连接之前执行字段的设置索引。
最后,我有一个简单对象的测试用例。GenericReflector
当我在没有查询优化和索引的情况下开始时(更糟糕的是,使用由于我未能提供模型 .dll而被迫使用的服务器),对于大约 100,000 个对象的三标准查询来说,它也需要 600 秒。现在,对 250 万个对象的相同查询需要 6 秒,因此确实有巨大的收益。