40만건.데이터 ㅠㅠ 쿼리가 너무 느려요~ 0 0 800

by 성울 [MySQL] [2015.10.17 21:13:29]


SELECT * 
  FROM 
       (SELECT IFNULL(ROUND(MAX(TA.WIND_PCS_TODAY_DEVL) / 1000, 3), 0) AS TODAY_DEVL, 
              IFNULL(ROUND(MAX(TA.MAX_WIND_PCS_TODAY_DEVL) / 1000, 3), 0) AS MAX_TODAY_DEVL 
         FROM 
              (SELECT MAX(CAST(T1.WIND_PCS_TODAY_DEVL AS SIGNED)) AS WIND_PCS_TODAY_DEVL, 
                     CAST(MAX(T1.WIND_PCS_TODAY_DEVL)- 
                     (SELECT MAX(S1.WIND_PCS_TODAY_DEVL) 
                       FROM tbl_wind_pcs S1 
                      WHERE DATE_FORMAT(S1.WIND_PCS_REG_DATE, '%Y-%m-%d %H') = DATE_FORMAT(DATE_ADD(T1.WIND_PCS_REG_DATE,interval -1 hour), '%Y-%m-%d %H') 
                        GROUP BY DATE_FORMAT(S1.WIND_PCS_REG_DATE, '%Y-%m-%d %H') 
                     ) AS SIGNED) AS MAX_WIND_PCS_TODAY_DEVL, 
                     DATE_FORMAT(T1.WIND_PCS_REG_DATE, '%Y-%m-%d %H') 
                FROM tbl_wind_pcs T1 
               WHERE T1.WIND_PCS_REG_DATE >= CURDATE() 
                     AND DATE_FORMAT(T1.WIND_PCS_REG_DATE, '%H') <> '00' 
                 GROUP BY DATE_FORMAT(T1.WIND_PCS_REG_DATE, '%Y-%m-%d %H') 
              ) AS TA 
       ) AS TTA, 
       (SELECT ROUND(SUM(MONTH_DEVL) / 1000, 3) AS MONTH_DEVL, 
              ROUND(MAX(MONTH_DEVL) / 1000, 3) AS MAX_MONTH_DEVL, 
              ROUND(MAX(TOTAL_DEVL) / 1000000, 3) AS TOTAL_DEVL 
         FROM 
              (SELECT MAX(CAST(T1.WIND_PCS_TODAY_DEVL AS SIGNED)) AS MONTH_DEVL, 
                     MAX(CAST(T1.WIND_PCS_TOTAL_DEVL AS SIGNED)) AS TOTAL_DEVL, 
                     DATE_FORMAT(T1.WIND_PCS_REG_DATE, '%Y-%m-%d') 
                FROM tbl_wind_pcs T1 
               WHERE DATE_FORMAT(T1.WIND_PCS_REG_DATE, '%Y-%m') = DATE_FORMAT(CURDATE(), '%Y-%m') 
                     AND DATE_FORMAT(T1.WIND_PCS_REG_DATE, '%H') <> '00' 
                 GROUP BY DATE_FORMAT(T1.WIND_PCS_REG_DATE, '%Y-%m-%d') 
              ) TB 
       ) AS TTB, 
       (SELECT IFNULL((SELECT ROUND((MAX(T1.WIND_PCS_TOTAL_DEVL)-MIN(S1.WIND_PCS_TOTAL_DEVL)) / 1000, 2) FROM tbl_wind_pcs S1 WHERE S1.WIND_PCS_REG_DATE >= DATE_ADD(NOW(), INTERVAL -1 HOUR) ), 0)AS CURRENT_OUTPUT 
              FROM tbl_wind_pcs T1 
            ) AS TTC

안녕하세요

DB 초보 개발자입니다.

 

쿼리가 너무 느립니다 데이터는 40만건정도있는데...ㅠㅠ

 

17초 걸리네요 ㅠ

 

현재 쿼리입니다..

 

부탁드리겠습니다.

 

 

 

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입