2010-02-07 63 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,所以確實有很大的收益。