2015-01-14 3 views
0

필자는 필자에게 필요한 결과를 제공하지만 매우 느린 쿼리를 작성했습니다.mysql 쿼리 속도를 향상시킬 방법이 있습니까?

문제 : 매우 느립니다.

질문 : 내가 쿼리를 빠르게 할 수있는 방법이 있습니까?

SELECT ci.ctt_region_id, 
    ci.region_name, 
    cs.slot_set_date, 
    cs.ctt_photo_slot_id, 
    /* Mon*/ 
    (SELECT GROUP_CONCAT(DISTINCT AA.slot_set_time SEPARATOR ',') 
    FROM ctt_photo_slot AA 
    WHERE slot_set_date = '2015-01-12' 
      AND slot_set_time = '11:00:00' 
    ) as mon_eleven_time, 
    (SELECT GROUP_CONCAT(DISTINCT AA.slot_set_time SEPARATOR ',') 
    FROM ctt_photo_slot AA 
    WHERE slot_set_date = '2015-01-12' 
      AND slot_set_time = '14:00:00' 
    ) as mon_two_time, 
    (SELECT GROUP_CONCAT(DISTINCT AA.slot_set_time SEPARATOR ',') 
    FROM ctt_photo_slot AA 
    WHERE slot_set_date = '2015-01-12' 
      AND slot_set_time = '17:00:00' 
    ) as mon_five_time, 
    (SELECT GROUP_CONCAT(DISTINCT AA.slot_count SEPARATOR ',') 
    FROM ctt_photo_slot AA 
    WHERE slot_set_date = '2015-01-12' 
      AND slot_set_time = '11:00:00' 
      AND ctt_region_id = ci.ctt_region_id 
    ) as mon_eleven_timecount, 
    (SELECT GROUP_CONCAT(DISTINCT AA.slot_count SEPARATOR ',') 
    FROM ctt_photo_slot AA 
    WHERE slot_set_date = '2015-01-12' 
      AND slot_set_time = '14:00:00' 
      AND ctt_region_id = ci.ctt_region_id 
    ) as mon_two_timecount, 
    (SELECT GROUP_CONCAT(DISTINCT AA.slot_count SEPARATOR ',') 
    FROM ctt_photo_slot AA 
    WHERE slot_set_date = '2015-01-12' 
      AND slot_set_time = '17:00:00' 
      AND ctt_region_id = ci.ctt_region_id 
    ) as mon_five_timecount, 
    /* Tue*/ 
    (SELECT GROUP_CONCAT(DISTINCT AA.slot_set_time SEPARATOR ',') 
    FROM ctt_photo_slot AA 
    WHERE slot_set_date = '2015-01-13' 
      AND slot_set_time = '11:00:00' 
    ) as tue_eleven_time, 
    (SELECT GROUP_CONCAT(DISTINCT AA.slot_set_time SEPARATOR ',') 
    FROM ctt_photo_slot AA 
    WHERE slot_set_date = '2015-01-13' 
      AND slot_set_time = '14:00:00' 
    ) as tue_two_time, 
    (SELECT GROUP_CONCAT(DISTINCT AA.slot_set_time SEPARATOR ',') 
    FROM ctt_photo_slot AA 
    WHERE slot_set_date = '2015-01-13' 
      AND slot_set_time = '17:00:00' 
    ) as tue_five_time, 
    (SELECT GROUP_CONCAT(DISTINCT AA.slot_count SEPARATOR ',') 
    FROM ctt_photo_slot AA 
    WHERE slot_set_date = '2015-01-13' 
      AND slot_set_time = '11:00:00' 
      AND ctt_region_id = ci.ctt_region_id 
    ) as tue_eleven_timecount, 
    (SELECT GROUP_CONCAT(DISTINCT AA.slot_count SEPARATOR ',') 
    FROM ctt_photo_slot AA 
    WHERE slot_set_date = '2015-01-13' 
      AND slot_set_time = '14:00:00' 
      AND ctt_region_id = ci.ctt_region_id 
    ) as tue_two_timecount, 
    (SELECT GROUP_CONCAT(DISTINCT AA.slot_count SEPARATOR ',') 
    FROM ctt_photo_slot AA 
    WHERE slot_set_date = '2015-01-13' 
      AND slot_set_time = '17:00:00' 
      AND ctt_region_id = ci.ctt_region_id 
    ) as tue_five_timecount, 
    /* Wed*/ 
    (SELECT GROUP_CONCAT(DISTINCT AA.slot_set_time SEPARATOR ',') 
    FROM ctt_photo_slot AA 
    WHERE slot_set_date = '2015-01-14' 
      AND slot_set_time = '11:00:00' 
    ) as wen_eleven_time, 
    (SELECT GROUP_CONCAT(DISTINCT AA.slot_set_time SEPARATOR ',') 
    FROM ctt_photo_slot AA 
    WHERE slot_set_date = '2015-01-14' 
      AND slot_set_time = '14:00:00' 
      AND ctt_region_id = ci.ctt_region_id 
    ) as wen_two_time, 
    (SELECT GROUP_CONCAT(DISTINCT AA.slot_set_time SEPARATOR ',') 
    FROM ctt_photo_slot AA 
    WHERE slot_set_date = '2015-01-14' 
      AND slot_set_time = '17:00:00' 
      AND ctt_region_id = ci.ctt_region_id 
    ) as wen_five_time, 
    (SELECT GROUP_CONCAT(DISTINCT AA.slot_count SEPARATOR ',') 
    FROM ctt_photo_slot AA 
    WHERE slot_set_date = '2015-01-14' 
      AND slot_set_time = '11:00:00' 
      AND ctt_region_id = ci.ctt_region_id 
    ) as wen_eleven_timecount, 
    (SELECT GROUP_CONCAT(DISTINCT AA.slot_count SEPARATOR ',') 
    FROM ctt_photo_slot AA 
    WHERE slot_set_date = '2015-01-14' 
      AND slot_set_time = '14:00:00' 
      AND ctt_region_id = ci.ctt_region_id 
    ) as wen_two_timecount, 
    (SELECT GROUP_CONCAT(DISTINCT AA.slot_count SEPARATOR ',') 
    FROM ctt_photo_slot AA 
    WHERE slot_set_date = '2015-01-14' 
      AND slot_set_time = '17:00:00' 
      AND ctt_region_id = ci.ctt_region_id 
    ) as wen_five_timecount, 
    /* Thu*/ 
    (SELECT GROUP_CONCAT(DISTINCT AA.slot_set_time SEPARATOR ',') 
    FROM ctt_photo_slot AA 
    WHERE slot_set_date = '2015-01-15' 
      AND slot_set_time = '11:00:00' 
    ) as thu_eleven_time, 
    (SELECT GROUP_CONCAT(DISTINCT AA.slot_set_time SEPARATOR ',') 
    FROM ctt_photo_slot AA 
    WHERE slot_set_date = '2015-01-15' 
      AND slot_set_time = '14:00:00' 
      AND ctt_region_id = ci.ctt_region_id 
    ) as thu_two_time, 
    (SELECT GROUP_CONCAT(DISTINCT AA.slot_set_time SEPARATOR ',') 
    FROM ctt_photo_slot AA 
    WHERE slot_set_date = '2015-01-15' 
      AND slot_set_time = '17:00:00' 
      AND ctt_region_id = ci.ctt_region_id 
    ) as thu_five_time, 
    (SELECT GROUP_CONCAT(DISTINCT AA.slot_count SEPARATOR ',') 
    FROM ctt_photo_slot AA 
    WHERE slot_set_date = '2015-01-15' 
      AND slot_set_time = '11:00:00' 
      AND ctt_region_id = ci.ctt_region_id 
    ) as thu_eleven_timecount, 
    (SELECT GROUP_CONCAT(DISTINCT AA.slot_count SEPARATOR ',') 
    FROM ctt_photo_slot AA 
    WHERE slot_set_date = '2015-01-15' 
      AND slot_set_time = '14:00:00' 
      AND ctt_region_id = ci.ctt_region_id 
    ) as thu_two_timecount, 
    (SELECT GROUP_CONCAT(DISTINCT AA.slot_count SEPARATOR ',') 
    FROM ctt_photo_slot AA 
    WHERE slot_set_date = '2015-01-15' 
      AND slot_set_time = '17:00:00' 
      AND ctt_region_id = ci.ctt_region_id 
    ) as thu_five_timecount, 
    /* Fri*/ 
    (SELECT GROUP_CONCAT(DISTINCT AA.slot_set_time SEPARATOR ',') 
    FROM ctt_photo_slot AA 
    WHERE slot_set_date = '2015-01-16' 
      AND slot_set_time = '11:00:00' 
    ) as fri_eleven_time, 
    (SELECT GROUP_CONCAT(DISTINCT AA.slot_set_time SEPARATOR ',') 
    FROM ctt_photo_slot AA 
    WHERE slot_set_date = '2015-01-16' 
      AND slot_set_time = '14:00:00' 
      AND ctt_region_id = cs.ctt_region_id 
    ) as fri_two_time, 
    (SELECT GROUP_CONCAT(DISTINCT AA.slot_set_time SEPARATOR ',') 
    FROM ctt_photo_slot AA 
    WHERE slot_set_date = '2015-01-16' 
      AND slot_set_time = '17:00:00' 
    ) as fri_five_time, 
    (SELECT GROUP_CONCAT(DISTINCT AA.slot_count SEPARATOR ',') 
    FROM ctt_photo_slot AA 
    WHERE slot_set_date = '2015-01-16' 
      AND slot_set_time = '11:00:00' 
      AND ctt_region_id = ci.ctt_region_id 
    ) as fri_eleven_timecount, 
    (SELECT GROUP_CONCAT(DISTINCT AA.slot_count SEPARATOR ',') 
    FROM ctt_photo_slot AA 
    WHERE slot_set_date = '2015-01-16' 
      AND slot_set_time = '14:00:00' 
      AND ctt_region_id = ci.ctt_region_id 
    ) as fri_two_timecount, 
    (SELECT GROUP_CONCAT(DISTINCT AA.slot_count SEPARATOR ',') 
    FROM ctt_photo_slot AA 
    WHERE slot_set_date = '2015-01-16' 
      AND slot_set_time = '17:00:00' 
      AND ctt_region_id = ci.ctt_region_id 
    ) as fri_five_timecount 
    FROM ctt_photo_slot cs 
    JOIN ctt_region ci 
    ON cs.ctt_region_id = ci.ctt_region_id 
    GROUP BY region_name; 
+1

거룩한 선택 ... – Shahar

답변

0

사용 조건 집계 :

SELECT ci.ctt_region_id, ci.region_name, cs.slot_set_date, cs.ctt_photo_slot_id, 
     /* Mon*/ 
     GROUP_CONCAT(DISTINCT CASE WHEN slot_set_date = '2015-01-12' AND slot_set_time = '11:00:00' 
            THEN AA.slot_set_time END SEPARATOR ',') as mon_eleven_time, 
     GROUP_CONCAT(DISTINCT CASE WHEN slot_set_date = '2015-01-12' AND slot_set_time = '14:00:00' 
            THEN AA.slot_set_time END SEPARATOR ',') as mon_two_time, 
     . . . 
FROM ctt_photo_slot cs JOIN 
    ctt_region ci 
    ON cs.ctt_region_id = ci.ctt_region_id 
GROUP BY region_name; 

cs.slot_set_datecs.ctt_photo_slot_idselect에서 무엇을하고 있는지 불분명하다. group by은 각 영역에 대해 하나의 행을 생성하므로 둘 이상의 값이있는 경우 임의의 값이 선택됩니다.

+0

정말 고마워요! – user2648080

관련 문제