Как мы можем оптимизировать этот запрос linq to entity, чтобы уменьшить время ответа? - PullRequest
0 голосов
/ 08 января 2010
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 секунд, и нам нужно попытаться решить эту проблему и уменьшить время отклика.

У кого-нибудь есть предложения?

Ответы [ 2 ]

1 голос
/ 08 января 2010

Что именно вы пытаетесь сделать? Можете ли вы дать мне представление о схеме здесь?

Это кажется мне странным утверждением, поскольку я не знаю схемы:

p => p.Price.Any (d => d.EventDatetime.Month ...

Однако я сделаю снимок в темноте и скажу, что у вас может быть проблема с:

eventDC.GetBooks ()

если этот метод вызывает хранимую процедуру или иным образом выполняет «Выбор * из книг» в базе данных, то на самом деле вы делаете:

  1. Выбор ВСЕХ книг из БД
  2. Взяв полученный список и выбрав из него только те книги, которые вам нужны

Если это так, то это, вероятно, ваша самая большая проблема.

0 голосов
/ 08 января 2010

Как правило, исследуйте SQL, чтобы увидеть, что он генерирует, что вы можете сделать встроенным. Существует инструмент, который может помочь вам сделать это, он называется LinqPad, и вы можете создать запрос LINQ и поэкспериментировать с настройкой запроса LINQ. Также ищем места для добавления индексов; это также может повысить производительность (слишком много индексов может снизить производительность, поэтому будьте осторожны).

...