Как ускорить запрос - PullRequest
       3

Как ускорить запрос

1 голос
/ 07 сентября 2011
var ci = ctx.CI().Where(p => p.PId == pId);

var result = ctx.RM().Where(p => p.R.D.PId == Id && p.MTId == mt.Id).
Sum(p => (((p.M.TN * p.EC * p.F.PW * 52m) + (p.M.TN * p.EC * p.F.PY * (WW / 52m)))
/ 100m) * ci.FirstOrDefault(q => q.PId == p.R.PId.Value && q.FPId == p.R.FPId.Value).Factor);

8000 записей. Запрос занимает 2000 мс для загрузки, делая это таким образом, и 4000, используя соединение на CI и RM.

Как видите, используется 6 таблиц. CC, RM, R, D, F и M.

Модель была определена с использованием CodeFirst, поэтому я использую EF 4.1.

Как я могу ускорить мой запрос, чтобы он выполнялся быстрее, чем за 2 секунды?

Ответы [ 2 ]

3 голосов
/ 07 сентября 2011

С таким сложным запросом я предполагаю, что на его составление уходит много времени. Попробуйте использовать CompiledQuery, чтобы разрешить повторное использование предварительно скомпилированного запроса.

Кроме того, вам нужно проанализировать полученный SQL-запрос, чтобы увидеть, сколько времени тратится в плане выполнения. Вполне возможно, что вы сможете значительно улучшить производительность с помощью нескольких удачно расположенных индексов.

0 голосов
/ 07 сентября 2011

Используйте хранимую процедуру и свяжите ef с функцией для нее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...