Come possiamo ottimizzare questa query LINQ to entità per ridurre il tempo di risposta?
-
19-09-2019 - |
Domanda
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>();
Abbiamo una lunga ricerca del tipo, e consumano molto tempo per ottenere i libri e l'ordinamento, dopo il test delle prestazioni, abbiamo trovato il tempo di risposta per visualizzare la pagina contenente la query supera i 10 secondi, e dobbiamo cercare di risolvere questo e ridurre il tempo di risposta.
Fare Qualcuno ha qualche suggerimento?
Soluzione
In genere esaminare lo SQL per vedere che cosa sta producendo, che si può fare in linea. V'è uno strumento che può aiutare a farlo, si chiama LINQPad, ed è possibile creare una query LINQ e giocare con tweaking la query LINQ. Inoltre, alla ricerca di luoghi di aggiungere indici; questo può accelerare le prestazioni troppo (troppi indici può compromettere le prestazioni in modo da essere troppo attento).
Altri suggerimenti
Che cosa stai cercando di fare? Mi può dare un'idea dello schema qui?
Questo mi sembra una dichiarazione strano per me dato che non so lo schema:
p => p.Price.Any (d => d.EventDatetime.Month ...
Comunque, sto andando prendere un colpo nel buio qui e dire che si potrebbe avere un problema con:
eventDC.GetBooks ()
se questo metodo chiama una stored procedure o comunque fa un "SELECT * FROM libri" sul database, allora che cosa si sta effettivamente facendo è:
- La selezione di tutti i libri dal DB
- Prendendo la lista risultante e selezionando solo i libri che si desidera da esso
Se questo è il caso, allora questo è probabilmente la più grande problema.