我有一个查询例如:
var personList = context.People;
People是一个视图,它有2个连接,大约2500行,需要大约10秒才能执行。 查看Estimated Execution计划告诉我它正在使用嵌套循环。
现在,如果我这样做:
var personList = context.People.Where(r => r.Surname.Length > -1);
执行时间不到一秒,执行计划正在使用哈希联接。
在生成的SQL中添加“OPTION(HASH JOIN)”可以提高性能。
所以我的问题是......
如何让查询使用哈希联接?它无法添加到视图中(我试过,它的错误)。 EF4中有一个选项可以强制执行吗?或者我必须将它放在存储过程中吗?
SELECT dbo.DecisionResults.ID, dbo.DecisionResults.UserID, dbo.DecisionResults.HasAgreed, dbo.DecisionResults.Comment,
dbo.DecisionResults.DateResponded, Person_1.Forename, Person_1.Surname, Site_1.Name, ISNULL(dbo.DecisionResults.StaffID, - 999)
AS StaffID
FROM dbo.DecisionResults INNER JOIN
Server2.DB2.dbo.Person AS Person_1 ON Person_1.StaffID = dbo.DecisionResults.StaffID INNER JOIN
Server2.DB2.dbo.Site AS Site_1 ON Person_1.SiteID = Site_1.SiteID
ORDER BY Person_1.Surname
如果我在结尾添加OPTION(HASH JOIN),它将会出错:
'查询提示'不能在此查询类型中使用。
但是将该脚本作为查询运行正常。