2011-01-27 2 views
2

Я создаю приложение для расчета некоторых Login -Logouts в колл-центре, в основном то, что я делаю, это получить интервал времени.Математическая операция в SQL?

Что было бы лучше: , чтобы получить интервал на сервере БД (SQL Server 2000), или в самом коде (Perl)? я бегу на Windows Server 2003.

В основном операция: Войти, Выход + 1 Но есть около 1 000 000 строк по каждому запросу.

P.S Я знаю, как это сделать, что мне интересно, что было бы лучшей практикой.

Это мой фактический запрос:

select S.Ident,S.Dateissued , 
     S.LoginMin,S.LogoutMin , 
     E.Exc_Name , 
     CAST(CAST((LoginMin/60 + (LoginMin % 60)/100.0) as int) AS varchar) + ':' + CASE WHEN LoginMin % 60 < 10 THEN '0'+ CAST(LoginMin % 60 AS varchar) ELSE CAST(LoginMin % 60 AS varchar) END , 
     CAST(CAST((LogoutMin/60 + (LogoutMin % 60)/100.0) as int) AS varchar) + ':' + CASE WHEN LogoutMin % 60 < 10 THEN '0'+ CAST(LogoutMin % 60 AS varchar) ELSE CAST(LogoutMin % 60 AS varchar) END, 
     (LogoutMin-LoginMin)+1 as Mins, 
     E.Exc_ID,action 
FROM igp_ScheduleLoginLogout S INNER JOIN igp_ExemptionsCatalog E 
ON S.Exc_ID = E.Exc_ID 
where ident=$ident 
and dateissued between '$dateissued' and '$dateissued2'" 
+0

У вас есть модель данных, которая поможет лучше ответить на ваш вопрос? – Chandu

+0

Я добавил запрос – isJustMe

+0

Просто боковое: Броски, которые вы делаете для отображения hh: mm, вычисляются намного дороже, чем ваш простой расчет, на порядок. – Martin

ответ

3

Короткий ответ:

Если вы делаете математику на набор данных (например, ваш 1 млн пример строки), SQL оптимизирован для набора на основе операций.

Если вы выполняете математику на итеративной основе по очереди, ваше вызывающее приложение или сценарий, вероятно, лучше всего.

+0

Это действительно по-подряд! Спасибо за советы! – isJustMe

+0

Я думаю, вы имеете в виду «совет» – StingyJack

+0

@ Rafael: лучший способ поблагодарить людей на этом сайте - принять ответ, который лучше всего сработал для вас. – Ether

1

Как правило, агрегирование на сервере и возврат окончательного ответа происходит быстрее, чем вытягивание всех строк в приложение и их перехват.

+0

Я вижу! Однако мне еще нужно принести две другие строки: – isJustMe

0

Как правило, ответ заключается в том, что если вы можете выполнить вычисление как часть запроса SQL, не изменяя форму запроса, и если ваш код на уровне приложения поддерживает его (например, вы не используете ORM, который затрудняет), то вы можете также выполнить запрос как часть SQL. При таком простом вычислении это вряд ли имеет большое значение, поэтому вы должны писать все, что приводит к самому поддерживаемому коду.

Как и в случае с любым вопросом с производительностью, реальный ответ заключается в том, чтобы сравнить его самостоятельно. Ответы на StackOverflow могут получить только до сих пор, так как многие факторы могут повлиять на производительность в реальном мире.

0

Отчасти это зависит от того, насколько это масштабируемо.

С 1 клиента и 1 сервер, как и другие отметили, делая это в SQL может быть быстрее (но тест самостоятельно, вы!)

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

Смежные вопросы