为Entity Framework 4选择SQL连接类型

时间:2010-12-14 15:32:06

标签: sql-server performance join entity-framework-4 sql-view

我有一个查询例如:

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中有一个选项可以强制执行吗?或者我必须将它放在存储过程中吗?


RE:查看

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),它将会出错:

  

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

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

0 个答案:

没有答案