1

例如,我有一个查询:

var personList = context.People;

People 是一个视图,上面有 2 个连接和大约 2500 行,执行大约需要 10 秒。查看估计的执行计划告诉我它正在使用嵌套循环。

现在如果我这样做:

var personList = context.People.Where(r => r.Surname.Length > -1);

执行时间不到一秒,执行计划使用 Hash Join。

在生成的 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) 添加到末尾,则会出错:

在此查询类型中不能使用“查询提示”。

但是将该脚本作为查询运行可以正常工作。

4

0 回答 0