سؤال

يستغرق الاستعلام التالي بعض الوقت للعودة:

db.Query<Person>(x => x.StartsWith("Chr", StringComparison.CurrentCultureIgnoreCase))

هل هناك طريقة للحصول على هذا يعمل بشكل صحيح؟ أي أسرع؟

هل كانت مفيدة؟

المحلول

ربما ركضت في حدود الاستعلام DB4O تحسين. وبعد عادة ما يتم ترجمة الاستعلامات الأصلية واستعلامات LINQ إلى مستوى منخفض استعلام الصودا. وبعد عندما يفشل هذا التحسين، تقوم DB4O بميزة الكائنات الموجودة في قاعدة البيانات لتنفيذ الاستعلام. كما يمكنك أن تتخيل أن هذا قد يكون بطيئا تماما.

أفضل الحل الحالي هو استخدام الصودا مباشرة لهذه الحالة. على سبيل المثال فئة مع خاصية واحدة:

 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));

يمكن تمثيلها بواسطة هذا الاستعلام الصودا:

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())
{
    // 
}

آمل أن يدعم الإصدارات المستقبلية من Optimizer الاستعلام هذه الحالة مباشرة.

نصائح أخرى

إضافة وفهرس على العمود الذي تقارنه ربما يساعد من ذلك.

http://developer.db4o.com/documentation/Reference/db4o-7.4/net35/tutorial/docs/indexes.html#outline219.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top