次のクエリが返されるまでに時間がかかります。
db.Query<Person>(x => x.StartsWith("Chr", StringComparison.CurrentCultureIgnoreCase))
これを正しく機能させる方法はありますか?つまり、より速く?
たぶん、 db4oのクエリ最適化の制限に遭遇したかもしれません。通常、ネイティブクエリとLINQクエリは低レベルのSODAクエリに変換されます。この最適化が失敗すると、db4oはクエリを実行するためにデータベース内のオブジェクトをインスタンス化します。ご想像のとおり、これは非常に遅い場合があります。
現在の最善の解決策は、この場合に直接SODAを使用することです。たとえば、1つのプロパティを持つクラス:
public class SimpleObject
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}
次のようなネイティブクエリ:
var result = db.Query<SimpleObject>(x => x.Name.StartsWith ("Chr",StringComparison.CurrentCultureIgnoreCase));
このSODA-Queryで表すことができます:
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())
{
//
}
Query-Optimizerの将来のバージョンがこのケースを直接サポートすることを願っています。
比較している列にインデックスを追加すると、おそらく役立つでしょう。