У меня есть запрос, например:
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) в конец, он выдаст ошибку:
«Подсказки к запросу» нельзя использовать в этом типе запроса.
Но выполнение этого скрипта как запроса работает нормально.