Я рефакторинг некоторого старого SQL, который борется после 4 лет и 1,7 млн строк данных. Есть ли способ улучшить следующий запрос MS SQL:
SELECT ServiceGetDayRange_1.[Display Start Date],
SUM (CASE WHEN Calls.line_date BETWEEN [Start Date] AND [End Date] THEN 1 ELSE 0 END) AS PerDayCount
FROM dbo.ServiceGetDayRange(GETUTCDATE(), 30, @standardBias, @daylightBias, @DST_startMonth, @DST_endMonth, @DST_startWeek, @DST_endWeek, @DST_startHour, @DST_endHour, @DST_startDayNumber, @DST_endDayNumber) AS ServiceGetDayRange_1 CROSS JOIN
(select [line_date] from dbo.l_log where dbo.l_log.line_date > dateadd(day,-31,GETUTCDATE())) as Calls
GROUP BY ServiceGetDayRange_1.[Display Start Date], ServiceGetDayRange_1.[Display End Date]
ORDER BY [Display Start Date]
Подсчитывает записи в журнале за предыдущие 30 дней (функция ServiceGetDayRange возвращает диапазоны детализации таблицы, выровненные по TZ) для построения графика на диаграмме. Бесполезная информация, но я не клиент.
В плане выполнения указано, что 99% времени исполнения используется для подсчета записей ... как и следовало ожидать. Очень небольшая нагрузка при обработке смещений TZ (не более 30 строк).
Глупо я подумал «ах, индексированное представление», но потом понял, что не могу привязаться к функции.
Текущее время выполнения, если 6,25 секунды. Любое улучшение в этом + повтор
Заранее спасибо.