2013-03-11 122 views
0

我有以下的情況:我有一個像在一份報告中16次的查詢,而這一切在開始使用幾乎相同的SELECT聲明:查詢速度慢,可能的優化

SELECT 
    sereresystem.registrationtime, 
    CONVERT(VARCHAR(11),DATEADD(DAY,DATEDIFF(DAY,0,sereresystem.registrationtime),0),120) AS [Day], 
    CAST(datepart(YEAR,sereresystem.registrationtime) AS CHAR(4))+'/KW '+CAST(Datepart(ISO_WEEK,sereresystem.registrationtime) AS VARCHAR(2)) AS [Week], 
    Datepart(m,DATEADD(MONTH,DATEDIFF(MONTH,0,sereresystem.registrationtime),0)) AS [Month], 
    CAST(datepart(YEAR,sereresystem.registrationtime) AS CHAR(4))+'/'+CAST(Datepart(q,DATEADD(MONTH,DATEDIFF(MONTH,0,sereresystem.registrationtime),0)) AS VARCHAR(1)) AS [Quarter], 
    Datepart(year,DATEADD(MONTH,DATEDIFF(MONTH,0,sereresystem.registrationtime),0)) AS [Year], 
    COUNT(sereresystem.caseid) AS [Total] 
FROM sereresystem 
    INNER JOIN sereregeneral ON sereresystem.caseid=sereregeneral.caseid 
    INNER JOIN sereresperou ON sereresystem.caseid=sereresperou.caseid 
WHERE sereregeneral.inpcha IN(@Inputchannel) 
    AND sereresperou.assrol IN(@Assigned_Role) 
    AND sereresystem.registrationtime BETWEEN @Starttime AND @Endtime 
    AND sereresystem.referencenumber=sereregeneral.renure 
GROUP BY sereresystem.registrationtime 

我需要一天的值,一週,月份,季度和年份在SSRS中的這些值之後動態分組。 我現在的問題是報告速度很慢。是否有可能縮短這5個日期選擇語句的處理時間?

CNC中現在完整的查詢

+1

問題將是'FROM'而不是'SELECT' – 2013-03-11 12:56:15

+0

這個查詢返回多少行?最終報告中有多少結果?你彙總結果嗎? - 簡而言之,你可以發佈整個查詢嗎?你展示的部分不太可能導致你的問題。 – 2013-03-11 12:57:46

+0

查詢返回取決於選擇的日期(開始時間和結束時間)和取決於選擇的格式8day,周等)所以這是一種可能性約365行每年(選擇日)或1行(選擇年份) – 2013-03-11 13:20:22

回答

0

你應該定義「該死的緩慢」和你的期望/要求。

假設16個查詢不相同,那麼將它們作爲單獨的數據集運行通常比組合它們要快。這是由於現代服務器,SQL和SSRS的並行架構。

我會檢查表索引 - 如果您不確定,那麼在FROM子句之後引用的每個列的單獨索引將是一個好的開始。