Агрессивность с формулами - PullRequest
0 голосов
/ 09 октября 2019

Есть ли разница в производительности Формулы-1 против Формулы-2?

Как мне провести тестирование производительности Формулы-1 против Формулы-2?

SELECT SomeGroupedInfo
 , SUM(Dollars) - SUM(DollarsAdjustments) Formula1
 , SUM(Dollars - DollarsAdjustments) Formula2
FROM LargeTable_50MillRecords
GROUP BY SomeGroupedInfo

ПРИМЕЧАНИЕ. Среда разработки неесть 50 миллионов записей, но производство будет

Ответы [ 2 ]

1 голос
/ 09 октября 2019

Как уже упоминалось в комментариях, оба метода агрегирования запускаются как отдельные запросы и просматривают статистику запросов (для этого следует справка по запросу):

SELECT  t.[text] as sql_Text, 
        s.total_elapsed_time, 
        ((s.total_elapsed_time + 0.0) /s.execution_count) as avg_elapsed_time,
        s.total_worker_time, 
        ((s.total_worker_time + 0.0) / s.execution_count) as avg_worker_time,
        s.total_clr_time
FROM sys.dm_exec_query_stats AS s 
        CROSS APPLY sys.dm_exec_sql_text(s.[sql_handle]) AS t
WHERE t.[text] LIKE N'%LargeTable_50MillRecords%'
ORDER BY s.last_execution_time;

Вы также можете получить ценные сведения, установив SET STATISTICS IO ON; непосредственно передпри выполнении select запросов это даст вам нагрузку ввода-вывода, т. е. сколько страниц нужно было прочитать движку SQL, чтобы получить результат для каждого запроса, эта информация доступна в разделе сообщений результата запроса.

0 голосов
/ 09 октября 2019

Вы можете попробовать запустить каждую формулу и посмотреть, сколько на это потребуется времени.

SELECT SomeGroupedInfo
 , SUM(Dollars) - SUM(DollarsAdjustments) Formula1
FROM LargeTable_50MillRecords
GROUP BY SomeGroupedInfo

и

SELECT SomeGroupedInfo
 , SUM(Dollars - DollarsAdjustments) Formula2
FROM LargeTable_50MillRecords
GROUP BY SomeGroupedInfo

Тот, кто занимает наименьшее время, будет наиболее эффективным.

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