Оптимизация запросов Entity Framework - PullRequest
5 голосов
/ 20 октября 2011

У меня есть опыт работы с Entity Framework в течение нескольких месяцев, и в основном я написал множество запросов linq для поиска данных. Я имею дело с большим фоном SQL и пытаюсь оптимизировать некоторые из SQL для производительности и читабельности, если я пытаюсь отладить проблемы с производительностью.

Я заметил, что некоторые из сгенерированных SQL делают такие вещи для таблицы A со столбцами {col1, col2, col3}

select
    Extent1.col1
from
(
   select col1, col2, col3 from tableA
) AS Extent1

У меня вопрос: как мне запретить делать эти бесполезные производные таблицы, а вместо этого просто сделать

select col1 from tableA 

где это нужно? Кажется, я не могу понять, почему он иногда так делает, а иногда нет ...

1 Ответ

5 голосов
/ 20 октября 2011

Вы сравнивали фактические планы выполнения запроса сгенерированного запроса с тем, как бы вы его оптимизировали? Вы можете быть удивлены результатами, я знаю, что был. И я глубоко уважаю разработчиков в команде SQL-сервера, которые, кажется, отлично справляются с работой, выполняя то, что выглядит как неоптимальный запрос, точно так же.

Мне было бы интересно услышать, если ваш опыт отличается от моего; Я перестал искать способы изменить сгенерированные запросы, потому что для каждого запроса, который я пытался просмотреть, не было реальной разницы в производительности.

EDIT: Мое последнее утверждение не совсем верно, есть определенно N + 1 ситуаций, которые вы должны отслеживать, и любые пакетные операции (обновления, удаления и вставки нескольких записей одновременно) не будут даже близок по производительности к написанию запроса вручную из-за характера работы с отдельными записями. Но посторонние экстенты по существу удаляются оптимизатором запросов SQL Server.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...