查询缓慢,可能的优化

时间:2013-03-11 12:41:53

标签: sql tsql optimization reporting-services

我有以下情况:我在报告中有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个日期选择语句的处理时间?

-edit-现在是完整的查询

1 个答案:

答案 0 :(得分:0)

你应该定义“该死的慢”以及你的期望/要求。

假设16个查询不相同,那么将它们作为单独的数据集运行通常比组合它们更快。这是由于现代服务器,SQL和SSRS的并行体系结构。

我会检查表索引 - 如果你不确定那么在FROM子句之后引用的每一列上的单独索引都是一个好的开始。