Intereting Posts
sql аргумент хранимой процедуры как параметр для динамического запроса Производительность SQL Server в xquery с циклом for Как добавить свойство описания в представление конструктора таблиц в SSMS? EntityFramework не обновляет столбец со значением по умолчанию ОШИБКА: Неизвестная опция подключения в строке подключения: attachdbfilename Какой из них быстрее: Entity Framework и хранимые процедуры? Разнородное подключение к базе данных Хранилище NVarchar vs Varchar storage на SQL Server T-SQL Выберите соединение с условием альтернативы REPLACE в текстовом или ntext-типе данных Как работает функция «потоковая передача» таблицы CLR? Как сказать, используя T-SQL, имеет ли база данных SQL-сервера свойство TRUSTWORTHY, включенное или выключенное Чувствительность к регистру при запросе SQL Server 2005 с .NET с использованием OleDB Как сохранить план выполнения запросов, чтобы их можно было использовать позже SELECT конкретных символов из столбца SQL

(EF 4.0 по сравнению с обычным SQL) Улучшение времени выполнения в Linq

Когда я выполняю этот оператор SQL, для запуска абсолютно нет времени:

select * from [user] left join licence on [user].userID = licence.UserID left join licenceProducts on licence.licenceID = licenceProducts.licenceID left join products on products.productID = licenceProducts.productID left join contacts on contacts.UserID = [user].userID left join usersupportedproducts on usersupportedproducts.UserID = [user].userID left join [user] b on b.userID = [user].ParentUserID where [user].Type <> 6 order by [user].name 

Однако, когда я запускаю тот же запрос с использованием EF 4.0, для выполнения требуется почти 20 секунд.

Есть ли способ улучшить этот запрос Linq, я попробовал?

 users = null; using (var db = new DistributorEntities()) { try { users = db.Users .Include(u => u.Licences) .Include(u => u.Licences.Select(l => l.LicenceProducts.Select(lp => lp.Product))) .Include(u => u.UserAddress) .Include(u => u.Contact) .Include(u => u.User2) .Include(u => u.SupportProducts) .Where(u => u.Type != (int)UserType.Admin) .OrderBy(u => u.Name) .ToList(); } catch (Exception ex) { if (ex is InvalidOperationException) { _EventLog.WriteEntry(ex.Message + " WebService.GetAllUsersAndChildren"); } exception = new ServiceError(ex); } } 

Я попытался выполнить ExecuteStoreQuery() , поставив свой оператор SQl, но не присоединился к отношениям users .

Solutions Collecting From Web of "(EF 4.0 по сравнению с обычным SQL) Улучшение времени выполнения в Linq"

Написание запросов непосредственно в SQL почти всегда более эффективно, чем запись выражений в LINQ, которые затем должны быть переведены на «субоптимальный» SQL.

То, что вы можете сделать, это просто создать VIEW , содержащий ваш запрос, а затем сопоставить это VIEW с Entity в Entity Framework, а затем запросить Entity который будет просто выполнять VIEW в SQL Server.

См. Также http://www.mssqltips.com/sqlservertip/1990/how-to-use-sql-server-views-with-the-entity-framework/ .