Сгенерированные запросы Entity Framework 4 объединяют полные таблицы - PullRequest
3 голосов
/ 20 октября 2010

У меня есть две сущности: Мастер и Детали.Когда я запрашиваю их, в результате получается запрос к базе данных:

SELECT [Extent2]."needed columns listed here", [Extent1]."needed columns listed here"
FROM (SELECT * [Details]."all columns listed here"...
     FROM [dbo].[Details] AS [Details]) AS [Extent1]
LEFT OUTER JOIN [dbo].[Master] AS [Extent2] ON [Extent1].[key] = [Extent2].[key]
WHERE [Extent1].[filterColumn] = @p__linq__0

У меня вопрос: почему фильтр не находится во внутреннем запросе?Как я могу получить этот запрос?Я пробовал много выражений EF и Linq.

Мне нужно что-то вроде:

SELECT <anything needed>
  FROM Master LEFT JOIN Details ON Master.key = Details.Key
 WHERE filterColumn = @param

У меня полное последовательное сканирование в обеих таблицах и в моем производствесреда, у меня есть миллионы строк в каждой таблице.

Большое спасибо !!

1 Ответ

2 голосов
/ 20 октября 2010

Иногда Entity Framework не выдает лучший запрос. Для оптимизации вы можете выполнить несколько следующих действий.

  1. Изменить оператор linq (протестировать с помощью LINQPad )
  2. Создать сохраненный процесс и сопоставить сохраненный процесс с возвращением объекта
  3. Создайте представление, которое обрабатывает объединение, и сопоставьте представление с новым лицо
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...