我正在重構一些較舊的SQL,這是在4年和1.7m行數據之後掙扎。有沒有改善以下MS SQL查詢的方式:尋找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秒。任何改善+ rep
在此先感謝。
omg ...其整個4.5秒更快...我實際上打折了,因爲我認爲它owuld計數日期範圍(即總是30),您先生,是一個紳士。 – 2010-02-11 00:58:13
很高興聽到它。猜測,我認爲對於CASE來說,它必須訪問每一行並以不可優化的方式評估表達式。 COUNT(*)/ WHERE有機會更好地使用索引,也許... – 2010-02-11 01:06:51