实战演练(二):运行20小时的报表SQL优化后秒出

一、概述

这是我们SQL优化班的一个学员,据说该SQL在生产环境中已经运行了20个小时,快把服务器的磁盘资源耗尽了。这20个小时,我们可爱的学员就是靠着删除一些不重要的文件才能够勉强度过。 
据了解,该SQL为一个月运行一次的跑报表的SQL,主要问题是随着SQL的运行时间越来越长,所需的临时表空间也越来越大,导致磁盘资源用尽。

二、先看慢SQL

 ●  SQL 执行时长 ,目前已经20小时,还在继续执行

 
  1. SELECT

  2. COUNT( * ) AS totalNum,

  3. sum( CASE WHEN F.ALARM_LEVEL = 1 THEN 1 ELSE 0 END ) AS LEVELS1,

  4. sum( CASE WHEN F.ALARM_LEVEL = 2 THEN 1 ELSE 0 END ) AS LEVELS2,

  5. sum( CASE WHEN F.ALARM_LEVEL = 3 THEN 1 ELSE 0 END ) AS LEVELS3,

  6. sum( CASE WHEN F.DEAL_STATE = 0 THEN 1 ELSE 0 END ) AS DESTS

  7. FROM

  8. F

  9. LEFT JOIN DC ON DC.ID = F.CONST_ID

  10. LEFT JOIN V ON V.ID = F.VEHICLE_ID

  11. LEFT JOIN AREA ON AREA.ID = V.SYS_DIVISION_ID

  12. WHERE

  13. DC.ID IS NOT NULL

  14. AND V.ID IS NOT NULL

  15. AND F.DEAL_STATE = 0

  16. AND ALARM_LEVEL IN ( 1, 2, 3 )

  17. AND F.VEHICLE_ID IN (

  18. SELECT

原文链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值