我遇到了EF6非常奇怪的錯誤。我在第一遍上傳了〜38K條記錄。然後在我的第二輪,我用條件linq語句查詢表。該行代碼需要大約4分鐘才能運行。這是我的實體。EF6需要5分鐘才能在少於40,000條記錄上運行查詢
[Table("RAW_ADWORDS")]
public class AdWord
{
[Key]
public int ID { get; set; }
public bool Processed { get; set; }
public string Client { get; set; }
public long ClientID { get; set; }
public bool Active { get; set; }
public bool ProcessedAllFile { get; set; }
public DateTime LastTimeRun{ get; set; }
public DateTime? LastDateTimeProcessed { get; set; }
public virtual List<AdWordCampaign> Campaigns { get; set; }
}
[Table("foobar")]
public class AdWordCampaign
{
[Key]
public int ID { get; set; }
public string Campaign { get; set; }
public long CampaignID { get; set; }
public string Day { get; set; }
public long Clicks { get; set; }
public string CampaignStatus { get; set; }
public long Cost { get; set; }
public long Impressions { get; set; }
public double CTR { get; set; }
public long AvgCPC { get; set; }
public double AvgPosition { get; set; }
public DateTime DownloadDate { get; set; }
}
}
首先我運行此:
AdWord objAdWord = adwordsContext.AdWords.Where(c => c.ClientID == iCampaignID).FirstOrDefault();
然後
AdWordCampaign objAdWordCampaign = objAdWord.Campaigns.Where(c => c.CampaignID == iElementCampaignID && c.Day == sElementDate).FirstOrDefault();
線之上似乎加載所有它的第一次查詢之前的記錄。如果我在查詢中添加Take(5),它仍然需要4分鐘。
你有'ClientID'上的索引嗎?如果不是,它顯然會掃描整個桌子。 – abatishchev