Мне нужна помощь в оптимизации запросов linq в C#. У меня есть небольшое приложение, оно использует структуру сущности, а внутри - некоторый код:Entity framework Linq очень медленные запросы
using (var db = new MyEntities())
{
System.Diagnostics.Debug.WriteLine("Start: " + DateTime.Now.ToString());
var myData = from table1 in db.Table1
join table2 in db.Table2 on table1.Key equals table2.Key
// more joins from various tables
where table1.Date > StartDate && table1.Date < EndDate
select table1;
System.Diagnostics.Debug.WriteLine("After myData: " + DateTime.Now.ToString());
var count = myData.Count();
System.Diagnostics.Debug.WriteLine("After Count(): " + DateTime.Now.ToString());
var list = myData.ToList();
foreach(var variable in list)
{
//do something;
}
}
return
В этих таблицах имеется около 200 000 строк. Дело в том, что даже если Count() возвращает 0, Count() занимает около 10 секунд, а если есть несколько тысяч строк, то это занимает очень много времени (не менее 10 минут), а затем я получаю ошибку, эта переменная ноль. Есть ли какие-то методы или что-то, что поможет мне оптимизировать запросы linq?
Я хотел бы начать, глядя на SQL, генерируемый профилировщика или EF каротаж (https://msdn.microsoft.com/en-us/data/dn469464.aspx). У вас есть индексирование по ключам? Перемещайте причину, указанную выше, перед объединением, поскольку только появляется, чтобы посмотреть на первую таблицу. Кроме того, вам может не понадобиться объединение, если у вас есть навигационные свойства в моделях. –
Как долго требуется инструкция linq? Может быть, запрос ленивый, и когда вы подсчитываете данные, извлекается – Domysee