Ускорение запросов с помощью LINQ - PullRequest
4 голосов
/ 09 марта 2010

Я передаю около 350 строк (с некоторым сбором данных) из MS SQL Server в iSeries для обработки. Я чувствую, что процесс идет слишком медленно и занимает около минуты или около того. Я делаю все вещи MS SQL в LINQ2SQL. Вот основы того, что я делаю в настоящее время:

  1. Соберите все основные данные автомобиля для одновременной обработки.
  2. SUM () Расход топлива автомобилем
  3. SUM () Расход масла транспортным средством
  4. SUM () Запасные части, используемые в автомобиле
  5. SUM () Труд на автомобиле
  6. SUM () Наружный ремонт на автомобиле
  7. SUM () Дорожно-транспортные происшествия на транспортном средстве

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

У вас есть другие предложения?

Обратите внимание, что это продукт, поставляемый поставщиком, и я бы предпочел не создавать никаких хранимых процедур или представлений (которых в основном нет), которых еще нет в базе данных.

Обновление: У меня было еще один пост , ищущий альтернативы повышению скорости.

Ответы [ 3 ]

5 голосов
/ 09 марта 2010

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

Группировка ваших результатов по таблице - это, на мой взгляд, хорошая идея, поскольку вы уже обрабатываете эти данные.

Группировка запросов по таблицам и запуск их в разных потоках наверняка повысит производительность. Все зависит от того, является ли это оптимальным для вашей ситуации.

0 голосов
/ 16 марта 2010

Если важна производительность (одна минута - проблема?), Вы можете рассмотреть возможность использования сводной таблицы. Тогда вам просто нужно запросить сводную таблицу для вашего отчета. Сводная таблица может быть построена с использованием триггеров или с ночным извлечением партии в сводную таблицу.

0 голосов
/ 11 марта 2010

Похоже, база данных была плохо спроектирована. Что бы ни генерировал LINQ в фоновом режиме, это был крайне неэффективный код. Я не говорю, что LINQ плох, он просто плох для этой базы данных. Я перешел на быстро скомпонованную настройку .XSD, и время обработки изменилось с 1,25 до 15 секунд. После того, как я сделаю правильный редизайн, я могу только догадываться, что побрею еще несколько секунд. Я попробую LINQ снова в другой день на лучшей базе данных.

...