You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无写权限下服务工单平均关闭时长MySQL查询优化需求

优化后的MySQL查询方案

你的原查询因为重复执行了相同的筛选条件统计工单数量(外层一次、子查询一次),导致数据库需要两次扫描符合条件的数据,这是性能瓶颈的核心原因。下面是更高效且健壮的写法,仅需一次数据扫描就能完成所有计算:

SELECT 
    COUNT(hd_ticket.id) AS 'Tickets #',
    ROUND(
        IFNULL(
            SUM(TIMESTAMPDIFF(HOUR, hd_ticket.created, hd_ticket.time_closed)) / COUNT(hd_ticket.id),
            0
        ),
        2
    ) AS 'AVG Closure Time'
FROM hd_ticket 
LEFT JOIN hd_status ON hd_ticket.hd_status_id = hd_status.id 
WHERE 
    MONTH(hd_ticket.time_closed) = 12 
    AND YEAR(hd_ticket.time_closed) = 2017 
    AND hd_status.state LIKE '%close%' 
    AND hd_ticket.hd_queue_id IN (8)

关键优化细节:

  • 消除重复扫描:直接用SUM()计算所有符合条件工单的关闭时长总和,再除以COUNT()得到平均值,仅需一次遍历数据,比原查询的两次扫描效率提升明显。
  • 增强健壮性:加入IFNULL()处理工单数量为0的极端情况,避免出现除以0的报错(若没有符合条件的工单,平均值会返回0而非抛出错误)。
  • 完全兼容原逻辑:保留了你所有的筛选条件和计算规则,只是优化了聚合计算的方式。

如果想进一步挖掘性能潜力,还可以尝试:

  • 检查hd_ticket表的time_closed、hd_queue_id字段是否创建了索引
  • 检查hd_status表的id、state字段是否创建了索引
  • 考虑用DATE_FORMAT(time_closed, '%Y-%m') = '2017-12'替代MONTH()+YEAR()的组合,这样如果time_closed有索引,数据库可以直接利用索引快速筛选数据(效果取决于你的MySQL版本和索引类型)

内容的提问来源于stack exchange,提问作者Sonamor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:03:20