在sql查询中进行内部联接后,SSRS报告非常慢

时间:2016-08-19 06:30:43

标签: sql sql-server reporting-services

首先,我使用了没有第二个选择语句的查询,积极的是如果我选择了很长一段时间,报告真的很快,但它在每个周末和假日都显示了我。这不是一个大问题,然后我用SSRS中的过滤器选项排除了每个自由日,之后报告只显示了工作日,但问题是,有一些额外的行为0,这影响了计算。

唯一的解决方案是添加第二个选择语句“Scheduled”。 添加内部联接后,报表运行速度非常慢。第二个Select Statement是一个时间表,它排除了所有的周末和假日,如果我运行它,它不会显示任何额外的行。但是,大的问题是,报告运行速度非常慢。如果我选择了六个月的时间,它会显示“超时错误” 查询:

SELECT c.date, 
       c.team, 
       c.NAME, 
       c.prod, 
       c.product 
FROM   (SELECT intervaldate AS Date, 
               tsystem.NAME AS NAME, 
               productname  AS Product, 
               teamname     AS Team, 
               Sum(CASE 
                     WHEN countername = 'Prod' THEN displayunits 
                     ELSE 0 
                   END)     AS Prod 
        FROM   count 
               INNER JOIN tsystem 
                       ON count.systemid = tsystem.id 
        WHERE  intervaldate >= @StartDateTime 
               AND intervaldate <= @EndDateTime 
               AND tsystem.id IN (SELECT systemid 
                                  FROM   viewsystem 
                                  WHERE  viewid = 122) 
        GROUP  BY intervaldate, 
                  teamname, 
                  tsystem.NAME, 
                  productname) c 
       INNER JOIN (SELECT sh.scheduled AS Scheduled, 
                          sc.NAME      AS NAME 
                   FROM   history sh 
                          INNER JOIN schedule sc 
                                  ON ( sc.id = sh.scheduleid ) 
                   WHERE  scheduled != 0) p 
               ON p.NAME = c.NAME 

有没有可能让它更快?

1 个答案:

答案 0 :(得分:0)

您需要使用join

替换查询(子查询)的下方部分

<强> - &GT;和tsystem.ID(从ViewSystem中选择ViewID = 122的SystemID)

<强> - &GT; tsystem.ID = ViewSystem.SystemID的内部JOIN ViewSystem,其中ViewID = 122

联接比子查询更快。