Выбор типов соединения SQL для Entity Framework 4 - PullRequest
1 голос
/ 14 декабря 2010

У меня есть запрос, например:

var personList = context.People;

Представление People - это 2 объединения и около 2500 строк, выполнение которого занимает ~ 10 секунд. Глядя на план «Предполагаемое выполнение» говорит мне, что он использует вложенный цикл.

Теперь, если я сделаю это:

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

Время выполнения меньше секунды, и план выполнения использует Hash Join.

Добавление «OPTION (HASH JOIN)» к сгенерированному SQL имеет желаемый эффект увеличения производительности.

Так что мой вопрос ...

Как я могу получить запрос на использование хеш-соединения? Это не может быть добавлено к представлению (я пробовал, это ошибки). Есть ли вариант в 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) в конец, он выдаст ошибку:

«Подсказки к запросу» нельзя использовать в этом типе запроса.

Но выполнение этого скрипта как запроса работает нормально.

...