【问题标题】:SSRS Report very slow after doing inner join in sql query在sql查询中进行内部连接后SSRS报告非常慢
【发布时间】:2016-08-19 06:30:42
【问题描述】:

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

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

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 

有没有可能让它更快?

【问题讨论】:

  • 您使用的是哪个版本的 SQL Server?您可以通过将新的INNER JOIN 加入到tsystem.NAME 来将新的INNER JOIN 添加到第一个查询中,看看是否有帮助?可以分享一下查询计划吗?
  • 根据您提供的内容,我建议(如@NickyvV)查看查询计划。如果您对“countername”不是“Prod”的地方不感兴趣,那么也许可以将其过滤掉。此外,我很想用内部连接替换“systemid”的 IN 子句并观察性能。

标签: sql sql-server reporting-services


【解决方案1】:

您需要将查询(子查询)的以下部分替换为连接

-> 和 tsystem.ID in (Select SystemID from ViewSystem where ViewID = 122)

-> Inner JOIN ViewSystem on tsystem.ID=ViewSystem.SystemID where ViewID=122

联接比子查询快得多。

【讨论】:

    猜你喜欢
    • 2015-04-19
    • 2022-01-12
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多