데이터 50만건인데 너무 느려요 ㅠㅠ 0 2 791

by 성울 [MySQL] [2015.10.21 11:02:02]


오늘 시간대별

데이터 가져오는 쿼리 입니다.

어떻게 수정해야할까요ㅠㅠ

 

감이 안와서요 좀 도와주세요

 

 

SELECT ROUND(IF( POWER  <  0, 0, POWER) / 1000, 3) AS POWER,
         HOUR
    FROM
         (SELECT CAST(MAX(T1.WIND_PCS_TODAY_DEVL)-
                (SELECT MAX(S1.WIND_PCS_TODAY_DEVL)
                  FROM MEASURE_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 POWER,
                DATE_FORMAT(T1.WIND_PCS_REG_DATE, '%H') AS HOUR
           FROM MEASURE_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')
         ) TA

 

by 부쉬맨 [2015.10.21 11:19:29]

date_format 없애고 한번돌려보시죠.

어느부분의 select list가 느린건지 아님 조인조건으로 느린건지 판단을 해보셔야됩니다.

 


by 마농 [2015.10.21 13:54:13]
SELECT hour
     , power
  FROM (SELECT hour
             , ROUND(GREATEST(v - @v, 0) / 1000, 3) power
             , @v := v
          FROM (SELECT DATE_FORMAT(t1.wind_pcs_reg_date, '%H') hour
                     , MAX(t1.wind_pcs_today_devl) v
                  FROM measure_wind_pcs t1
                 WHERE t1.wind_pcs_reg_date >= CURDATE()
                   AND t1.wind_pcs_reg_date <  CURDATE() + INTERVAL 1 DAY
                 GROUP BY DATE_FORMAT(t1.wind_pcs_reg_date, '%H')
                 ORDER BY hour
                ) a
             , (SELECT @v := '') b
        ) c
 WHERE hour <> '00'
;

 

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