Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Все это прекрасно можно сделать и на SQL.
Видимо, вам просто не повезло с разработчиком БД. Понятно, что если писать плохой код, то и работать он будет плохо. Кстати, код на EF тоже надо поддерживать.Тут дело не в разработчике. Linq имеет средства декомпозиции запросов, поэтому на нем можно с помощью трех простых (точнее сказать примитивных) комбинаторов получить минимум 2^3=8 запросов.
А SQL эти индексы использовать не будет?Даже если будет, то менее эффективно. Потому что покрывающий индекс работает идеально когда есть проекция с теми же полями, что в индексе. Но для случая процедур никто не будет создавать десятки процедур с разными проекциями и одинаковыми предикатами, чтобы индексы работали.
Естественно, что для сложных запросов грамотно написанные хранимые процедуры будут намного более производительные, чем автоматически сгенерированный SQL код EF-ом
так как они могут в полной мере раскрыть все особенности и весь богатейший функционал СУБД MS SQL.
Мы используем EF во всех своих новых проектах, но когда сталкиваемся с действительной необходимостью оптимизации производительности, то мы используем хранимые процедуры, но на проект таких узких мест у нас на пальцах можно пересчитать.Мы все еще о запросах или о массовой обработке? При необходимости сразу обновить много данных процедуры рулят. Для запросов — тормозят. EF как раз для запросов и используется.
За счет того, что универсальное решение практически всегда проиграет по производительности специализированному.Именно. На практике как раз процедуры делают универсальными, покрывающими много сценариев, а linq генерирует специализированные запросы с проекциями, предикатами, постраничным разбиением, которые дают гораздо больше информации оптимизатору.
Например, рекурсивные запросы.
Поверьте и на EF можно писать очень плохо. Вы думаете мало тех, кто не использует проекции вообще и высасывает все данные методом ToList()? Это скорее говорит о низкой квалификации и безалаберном отношении к своей работе, чем об используемых технологиях.Я не просто верю, я регуоярно зарабатываю на проектах, где правлю такие косяки.
Вы попросили пример использования особенностей MS SQL. Вот он.
T-SQL это могучая и крайне гибкая технология. Естественно, что для сложных запросов грамотно написанные хранимые процедуры будут намного более производительные, чем автоматически сгенерированный SQL код EF-ом, так как они могут в полной мере раскрыть все особенности и весь богатейший функционал СУБД MS SQL.
Подводные камни Entity Framework и производительность