2015-10-13 56 views
2

我有以下linq查詢,產生一個非常大的SQL。通過分組生成一個巨大的查詢

 var visits = _db.Visits.AsNoTracking().GroupBy(x => x.City) 
      .Select(group => new 
      { 
       City = group.Key.Code, 
       CityName = group.Key.Name, 
       Count = group.Count() 
      }).OrderByDescending(x => x.Count); 

因爲Visits表有很多列。但是我只對該分組中的一個列感興趣。

所以這個命中性能和查詢速度很慢。

我怎樣才能讓它更快?

+1

你有沒有索引?\ –

+2

它產生的SQL是什麼? 「城市」是一個單獨的表,「訪問」有一個外鍵? –

+1

我建議你運行SQL事件探查器,預覽一個查詢,運行預覽執行計劃並找到瓶頸。 – pwas

回答

3

首先選擇你需要的數據,這樣你使用的數據集就會變小。這應該減少列的數量和查詢的大小。

var visits = _db.Visits.AsNoTracking() 
      .Select(c=> new // reduce the initial data set 
      { 
       City= c.City, 
       Code = c.Code, 
       Name = c.Name 
      }) 
      .GroupBy(x => x.City) 
      .Select(group => new // build results 
      { 
       City = group.Key.Code, 
       CityName = group.Key.Name, 
       Count = group.Count() 
      }) 
      .OrderByDescending(x => x.Count); 
+0

讓我試試看。 – DarthVader

+1

這樣好多了。謝啦。 – DarthVader