【问题标题】:Query slow, possible optimization查询慢,可能优化
【发布时间】:2013-03-11 12:41:53
【问题描述】:

我有以下情况:我在报告中有 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- 现在是完整的查询

【问题讨论】:

  • 问题将是FROM 而不是SELECT
  • 这个查询返回了多少行?其中有多少最终出现在最终报告中?你会汇总结果吗? -- 简而言之,你能发布整个查询吗?您展示的部分不太可能导致您的问题。
  • 查询返回取决于选择的日期(开始时间和结束时间)以及选择的格式 8 天、周等)因此每年有可能获得大约 365 行(选择日期)或1 行(选择年份)
  • 为什么需要运行 16 次查询?难道你不能运行一次,获取数据的超集,然后在你的报告中划分/过滤吗?
  • 我不认为这是一个性能瓶颈,但它不会帮助您在 SQL 中进行所有格式化。 7 列中有 5 列只是注册时间,以不同的 varchar 格式表示。您可以在 SSRS 中进行所有相同的格式化(您需要一个 ISO_WEEK 列,因为据我所知,这不是 SSRS 表达式中的有效选项)。您的选择中还有多余的计算,例如使用DATEADD(MONTH, DATEDIFF(MONTH, 0, Date), 0) 获取一个月的第一天,然后在此日期使用DATEPART(Q, ...。这与DATEPART(Q, Date) 相同。

标签: sql tsql optimization reporting-services


【解决方案1】:

您应该定义“该死的慢”以及您的期望/要求是什么。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    • 2015-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多