2012-03-20 12 views
1

実行に約1:30分かかります(かなり長い)クエリでパフォーマンスに問題があります。実行するには時間がかかりすぎる部分を見つけることができましたが、今はクエリを最適化する方法についてのアドバイスが必要です。私は8秒にクエリをスピードアップすることができたこれらの二つの部分を除去することにより、パフォーマンスの問題#1LINQ-to-Entityクエリの最適化

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) 

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) 
           }; 

ご迷惑をおかけして申し訳ございません。ありがとうございました!

あなたは、単一のフォーム休息のために

DailySum = db.Daily.Where(dt => dt.idTicket == t.idTicket) 
        .Sum(dts => (int?)dts.EfektivnoSati) 

でこのクエリを向上させることができます

+1

あなたのDBのテーブルに関連するインデックスを追加することにより、クエリを加速することができます。 – Mathieu

答えて

0

:追加:

  1. Dailyがテーブル:

  2. KontaktテーブルidTicket列にインデックスを追加idKontakt列のインデックス(まだ存在しない場合 PK)

またはそれ以上のSQLが生成されますと、(SQL Serverを使用している場合は、この)SSMSは、インデックスのお手伝いをする方法を参照

+0

ありがとうございました!私はそれを試してみましょう! –