Как мы можем оптимизировать этот запрос linq to entity, чтобы уменьшить время отклика?

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.Цена.Любая (d => d.Дата события.Месяц...

Тем не менее, я собираюсь рискнуть в темноте и сказать, что у вас могут возникнуть проблемы с:

eventDC.getBooks()

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top