كيف يمكننا تحسين هذا LINQ لاستعلام الكيان لتقليل وقت الاستجابة؟

StackOverflow https://stackoverflow.com/questions/2028335

سؤال

IQueryable<WebEvent> mySearch = 
    eventDC.GetBooks()
        .Where(p => p.Price.Any(d => d.EventDatetime.Month == fromDate.Month 
                                     && d.EventDatetime.Year == fromDate.Year))
        .WithGroup(groupId)
        .OrderBy(p => p.Price.Where(r => r.Datetime >= fromDate)
                             .OrderBy(q => q.Datetime)
                             .FirstOrDefault().Datetime);
List<Book>ventsList = mySearch.ToList<Book>();

لدينا مثل هذا الاستعلام الطويل، ويستهلك الكثير من الوقت للحصول على الكتب والفرز، بعد اختبار الأداء، وجدنا وقت الاستجابة للصفحة التي تحتوي على هذا الاستعلام يتجاوز 10 ثوان، ونحن بحاجة إلى السعي لحل هذا والحد من الاستجابة زمن.

هل لدى أي شخص أي اقتراحات؟

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

المحلول

عادة فحص SQL لمعرفة ما ينتج عنه، والذي يمكنك القيام به. هناك أداة يمكن أن تساعدك في القيام بذلك، يطلق عليه LinQPad، ويمكنك إنشاء استعلام LinQ وتشغيله مع تغيير استعلام LinQ. أيضا، تبحث عن أماكن لإضافة فهارس؛ هذا يمكن أن يسرع الأداء أيضا (يمكن أن تؤذي الكثير من الفهارس لأداء الأداء حتى تكون حذرا أيضا).

نصائح أخرى

ما الذي تحاول القيام به بالضبط؟ هل تستطيع أن تعطيني فكرة عن المخطط هنا؟

هذا يبدو وكأنه بيان غريب بالنسبة لي لأنني لا أعرف المخطط:

p => p.price.any (d => d.eventdatetime.month ...

ومع ذلك، سأقوم بالرصاص في الظلام هنا وأقول أنك قد يكون لديك مشكلة مع:

كتب eventdc.getbooks ()

إذا استدعت هذه الطريقة إجراء مخزن أو غير ذلك "حدد * من الكتب" في قاعدة البيانات، فماذا تفعل بالفعل هو:

  1. اختيار جميع الكتب من DB
  2. أخذ القائمة الناتجة وتحديد الكتب التي تريدها فقط

إذا كان هذا هو الحال، فمن المحتمل أن تكون المشكلة الأكبر الخاصة بك.

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