Я пытаюсь получить представление о производительности Entity Framework, в частности, о динамическом SQL, который он генерирует. Возьмите следующее утверждение, например:
var orders = db.Orders.Include(o => o.OrderItem).Include(o => o.Customer);
, который будет возвращать для всех заказов прикрепленные к нему позиции заказа и данные клиента для пользователя, который его заказал.
Что примерно соответствует SQL, как показано ниже:
Select *
from Order o
inner join OrderItem oi on o.OrderId = oi.OrderId
inner join Customer c on o.CustomerId = c.CustomerId
Теперь (в контексте SQL Server) этот план может кэшироваться, и этот пример очень прост, но по мере того, как запросы становятся все более и более динамичными и сложными, с параметрами, условиями, переменными и т. Д. Производительность базы данных становится проблема с EF и станет ли более эффективным использование хранимых процедур, скомпилированных или других объектов, вместо того, чтобы позволить EF генерировать динамический SQL?
Или мы можем предположить, что EF высоко оптимизирован, и кроме сценариев, когда SPROCS, представления, функции и т. Д. Необходимы на уровне базы данных в сложных сценариях, мы можем полагаться на то, что EF будет максимально эффективен в своих SQL-запросах?