实战演练(二):运行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

原文链接

猜你喜欢

转载自blog.csdn.net/weixin_40581617/article/details/83619181