Como podemos otimizar essa consulta LINQ para entidade para diminuir o tempo de resposta?
-
19-09-2019 - |
Pergunta
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>();
Temos uma consulta tão longa e consome muito tempo para obter os livros e a classificação, após o teste de desempenho, encontramos tempo de resposta para a página que contém essa consulta excede 10 segundos, e precisamos procurar resolver isso e reduzir a resposta Tempo.
Alguém tem alguma sugestão?
Solução
Normalmente, examine o SQL para ver o que está produzindo, que você pode fazer em linha. Existe uma ferramenta que pode ajudá -lo a fazer isso, é chamado Linqpad e você pode criar uma consulta LINQ e brincar com o ajuste da consulta Linq. Além disso, procurando lugares para adicionar índices; Isso também pode acelerar o desempenho (muitos índices podem prejudicar o desempenho, portanto, tenha cuidado também).
Outras dicas
O que exatamente você está tentando fazer? Você pode me dar uma idéia do esquema aqui?
Parece uma declaração estranha para mim, já que não conheço o esquema:
p => p.price.any (d => d.eventDateTime.month ...
No entanto, vou dar uma chance no escuro aqui e dizer que você pode ter um problema com:
eventdc.getbooks ()
Se esse método chamar um procedimento armazenado ou de outra forma fizer um "selecionar * dos livros" no banco de dados, o que você realmente está fazendo é:
- Selecionando todos os livros do banco de dados
- Pegando a lista resultante e selecionando apenas os livros que você deseja dela
Se for esse o caso, esse é provavelmente o seu maior problema.