У меня есть запрос:
(from sr in ctx.STARS_Route
where sr.STARS_RouteStopDestination.Any(i => i.IsWorkingSet == true && i.STARS_DistrictRoute.DistrictId == districtId) == true
select sr.DistrictRouteNumber).Distinct();
В LinqPad запрос выполнялся примерно за 0,3 секунды.В таблице STARS_RouteStopDestination примерно 800 тыс. Записей, но в среднем возвращается около 30-90 записей.
На практике метод, возвращающий результаты этого запроса, занимал 4+ секунды!Это не имело никакого смысла.
Единственное, о чем я мог подумать, это то, что предложение .Any занимало много времени, но LinqPad сказал, что запрос был быстрым.Я настроил тест (пожалуйста, прости имена):
using (STARSEntities ctx = new STARSEntities())
{
var Original = (from sr in ctx.STARS_Route
where sr.STARS_RouteStopDestination.Any(i => i.IsWorkingSet == true && i.STARS_DistrictRoute.DistrictId == districtId) == true
select sr.DistrictRouteNumber).Distinct();
var Entity = (from rsd in ctx.STARS_RouteStopDestination
where rsd.STARS_DistrictRoute.DistrictId == districtId
&& rsd.IsWorkingSet == true
select rsd.STARS_Route.DistrictRouteNumber).Distinct();
DateTime startOriginal = DateTime.Now;
routes = Original.ToList();
Debug.WriteLine("Original took: " + (DateTime.Now - startOriginal).ToString());
DateTime startEtity = DateTime.Now;
routes = Entity.ToList();
Debug.WriteLine("Entity took: " + (DateTime.Now - startEtity).ToString());
}
Вывод поразил меня:Оригинал занял: 00: 00: 04.0270000Для объекта потребовалось: 00: 00: 00.0200000
Почему запрос с предложением .Any выполняется намного дольше и почему LinqPad говорит, что запрос Original выполняется немного быстрее, чем запрос Entity для того же набора данных