1
我有一个(相当长)查询需要大约1:30分钟执行的性能问题。我能够找到需要执行的部分,但现在我需要关于如何优化查询的建议。LINQ到实体查询优化
var ticketList = (from t in db.Ticket
select t).ToList();
int idFirma = Convert.ToInt32(kontakt.idFirma);
gvTicketi.DataSource = from t in ticketList
orderby t.idTicket, t.RedniBroj, t.DatumPrijave
select new
{
t.idTicket,
t.idFirma,
t.idKontakt,
t.idManager,
t.idNadredeniTicket,
TicketNumber = t.idNadredeniTicket + "-" + t.RedniBroj,
t.Biljeske,
t.DatumDo,
t.DatumPrijave,
t.OpciPrioritet,
t.Opis,
t.OpisZatvoren,
t.Prioritet,
t.Status,
t.Tip,
t.VrstaPrijave,
t.Zatvoren,
t.DatumZatvaranja,
t.IzdanRacun,
NazivKontakta = t.Kontakt == null ? "Bez kontakta" : t.Kontakt.Ime + " " + t.Kontakt.Prezime,
Manager = t.idManager == null ? "Svi manageri" : (from k in db.Kontakt
where k.idKontakt == t.idManager
select k.Ime + " " + k.Prezime).SingleOrDefault(),
NazivTvrtke = t.Firma.Naziv,
DailyCount = db.Daily.Count(dt => dt.idTicket == t.idTicket && dt.Dolazak == true),
DailySum = db.Daily.Count(dt => dt.idTicket == t.idTicket) == 0 ? 0 : db.Daily.Where(dt => dt.idTicket == t.idTicket).Sum(dts => dts.EfektivnoSati)
};
性能问题#1
Manager = t.idManager == null ? "Svi manageri" : (from k in db.Kontakt where k.idKontakt == t.idManager select k.Ime + " " + k.Prezime).SingleOrDefault(),
性能问题#2
DailyCount = db.Daily.Count(dt => dt.idTicket == t.idTicket && dt.Dolazak == true),
DailySum = db.Daily.Count(dt => dt.idTicket == t.idTicket) == 0 ? 0 : db.Daily.Where(dt => dt.idTicket == t.idTicket).Sum(dts => dts.EfektivnoSati)
通过去除这两部分我能够查询加速为8秒。
任何建议,将不胜感激。谢谢!
您可以通过在数据库表中添加相关的索引加快查询索引(这一点,如果你使用SQL Server)。 – Mathieu 2012-03-20 11:34:08