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。
在绝望的尝试中,我将服务器时间增加到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
答案 0 :(得分:0)
正如James建议的那样,最好创建一个存储过程并通过LINQ调用它,传递任何必要的参数。这样,服务器将处理中的处理应该快得多,因为查询不必转换回SQL进行处理。除此之外,您可以使用SQL的查询分析器或分析器来查看瓶颈可能是什么。
答案 1 :(得分:0)
您可以尝试将Where
和OrderBy
子句移动到视图中,必要时使用存储过程/用户定义函数传入参数。
您还可以将Glimpse添加到项目中。在许多其他事情中,您可以检查SQL调用以查看是否有任何不必要或耗时的数据库命中。