2013-10-18 238 views
1
public List<Agents_main_view_distinct> getActiveAgents(DateTime start, DateTime end) 
    { 
     myactiveagents = null;    
     myactiveagents = mydb.Agents_main_view_distincts.Where(u => u.Status.Equals("Existing") && u.DateJoined2 >=start && u.DateJoined2 <=end).OrderByDescending(ac => ac.Recno).ToList();    
     return myactiveagents; 
    } 

我有一個簡單的LINQ查詢查詢視圖。我擔心它的性能。它適用於幾百條記錄,但是當記錄超過2000條時,SQL服務器超時。
我已經做過的改進性能的事情。
1.寫一個查詢直接查詢表(沒有改進)。
2.降低不經意的列,之前它有27列,減少到20.提高LINQ查詢性能

在絕望嘗試我增加了服務器時間到600.但仍然是超時。

任何幫助將不勝感激

查看SQL查詢

SELECT dbo.Agents.Recno, dbo.Agents.Rec_date, dbo.Agents.AgentsId, dbo.Agents.AgentsName, dbo.Agents.Industry_status, dbo.Agents.DOB, dbo.Agents.Branch, 
        dbo.Agents.MobileNumber, dbo.Agents.MaritalStatus, dbo.Agents.PIN, dbo.Agents.Gender, dbo.Agents.Email, dbo.Agents.ProvisionalLicense, 
        dbo.Agents.IRALicenseNumber, dbo.Agents.PreviousCompany, dbo.Agents.YearsOfExperience, dbo.Agents.COPNumber, dbo.Agents.DateJoined AS DateJoined2, 
        dbo.Agents.DateJoined, dbo.Agents.PreviousOccupation, dbo.Agents.ProffesionalQualification, dbo.Agents.EducationalQualification, dbo.Agents.Status, 
        dbo.Agents.Termination_Date2 AS Termination_Date, dbo.Agents.Comments, dbo.Agents.Temination_code, dbo.Agents.Company_ID, dbo.Agents.Submit_By, 
        dbo.Agents.PassportPhoto, dbo.Insurane_Companies.Company_name, DATEDIFF(year, dbo.Agents.DOB, GETDATE()) AS age, YEAR(dbo.Agents.DateJoined) 
        AS YearJoined, YEAR(dbo.Agents.Termination_Date2) AS YearTermination, dbo.Agents.REGION, dbo.Agents.DOB AS DOB2, 
        dbo.Insurane_Companies.Company_code 
    FROM   dbo.Agents INNER JOIN 
        dbo.Insurane_Companies ON dbo.Agents.Company_ID = dbo.Insurane_Companies.Company_id 
+1

你考慮過索引你的數據庫嗎?另外,由於您從視圖中提取,因此您可以考慮優化視圖本身。 –

+2

你可以發佈視圖本身的SQL代碼嗎? – lukiffer

+0

您是否嘗試過使用存儲過程? – James

回答

0

您可以嘗試將WhereOrderBy子句移入視圖本身,必要時使用存儲過程/用戶定義的函數傳入參數。

您還可以將Glimpse添加到您的項目中。在許多其他事情中,您可以檢查SQL調用以查看是否有任何不必要或耗時的數據庫命中。

+0

再次感謝,至少這已經把熱量放了一段時間。 – Angwenyi

0

正如詹姆斯所說,這將是最好創建一個存儲過程,並通過LINQ調用它,傳遞任何必要的參數。這樣,服務器將處理的處理速度要快得多,因爲查詢不必轉換回SQL進行處理。除此之外,您可以使用SQL的查詢分析器或分析器查看可能的瓶頸。

+0

喜歡同樣的問題在那裏和當查詢看起來是靜態的,存儲過程是最好的。 –

+0

我會給它一個鏡頭,並儘快給我反饋。 – Angwenyi