下面的查詢需要一段時間才能返回:DB4O StartsWith和忽略大小寫
db.Query<Person>(x => x.StartsWith("Chr", StringComparison.CurrentCultureIgnoreCase))
有沒有辦法讓這個正常工作?即更快?
下面的查詢需要一段時間才能返回:DB4O StartsWith和忽略大小寫
db.Query<Person>(x => x.StartsWith("Chr", StringComparison.CurrentCultureIgnoreCase))
有沒有辦法讓這個正常工作?即更快?
也許你跑進db4o’s query-optimization的限制。通常,本地查詢和LINQ查詢被翻譯爲低級SODA-query。當此優化失敗時,db4o會實例化數據庫中的對象以執行查詢。你可以想象這可能會很慢。
目前最好的解決方案是直接爲這種情況使用SODA。例如有一個屬性的類:
public class SimpleObject
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}
這樣的本地查詢:
IQuery query = db.Query();
query.Constrain(typeof (SimpleObject)); // restrict to a certain class
query.Descend("name").Constrain("Chr").StartsWith(false); // the field 'name' starts with 'chr', case-insensitive
foreach (var s in query.Execute())
{
//
}
希望的未來版本:
var result = db.Query<SimpleObject>(x => x.Name.StartsWith ("Chr",StringComparison.CurrentCultureIgnoreCase));
可以通過這個SODA查詢表示查詢優化器直接支持這種情況。
在你正在比較的列上添加和索引可能會有所幫助。
嗨,約翰,當你拿出StringComparison它會立即再次工作.. – 2010-02-08 02:43:51
「有趣」從哪裏來? – 2010-02-08 21:35:26
噢,複製和過去的錯誤,我已修復它。最初的例子使用'有趣'作爲搜索詞;) – Gamlor 2010-02-08 22:29:58
你是誰加勒爾..你已經回覆了我發佈的幾個Db4o問題:非常感謝。 之前,你發佈這個我實際上移動我的代碼到一個SODA查詢,使其10000000x更快..它只是痛苦完全移動到IList而不是IList <> .. 在文檔它的統計信息Linq查詢被翻譯成SODA查詢..也許這裏面的表達翻譯這個問題有一個修復..可能看看我是否可以修復它,並提供一些如何:D 感謝幫助球員非常感謝 – 2010-02-09 12:52:26