Db4o StartsWith et ignorer la casse
Question
La requête suivante prend un certain temps pour revenir:
db.Query<Person>(x => x.StartsWith("Chr", StringComparison.CurrentCultureIgnoreCase))
est-il un moyen d'obtenir ce travail correctement? à-dire plus rapide?
La solution
Peut-être vous a rencontré un limitation de -optimisation des requêtes de db4o. Normalement, les requêtes et les requêtes LINQ autochtones sont convertis en un faible niveau SODA-requête . Lorsque cette optimisation échoue, db4o instancie les objets dans la base de données afin d'exécuter la requête. Comme vous pouvez l'imaginer, cela peut être assez lent.
La meilleure solution actuelle est d'utiliser un SODA directement pour ce cas. Par exemple, une classe avec une propriété:
public class SimpleObject
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}
La requête native comme ceci:
var result = db.Query<SimpleObject>(x => x.Name.StartsWith ("Chr",StringComparison.CurrentCultureIgnoreCase));
Peut être représenté par cette 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())
{
//
}
J'espère que les futures versions du support ce cas de requête-Optimizer directement.
Autres conseils
ajouter et index sur la colonne que vous comparez serait probablement aider.