mysql 잘 하시는분 조언좀 부탁 드립니다. 정보
mysql 잘 하시는분 조언좀 부탁 드립니다.
본문
제가 mysql에 약하다 보니.........
짜논것이.... 엄청 느리네요~ ㅠ.ㅠ;;;;;;
다음과 같은 쿼리문과 같은 동작을 하면서 더 빠른 쿼리 구조가 있을까요?
ps. 다시 봐도 막노동의 기억이 새록새록.... ㅎㅎ;;;;
ps2. ...mysql은... 아무리... 해도.... 안느네요 ㅠ.ㅠ;
짜논것이.... 엄청 느리네요~ ㅠ.ㅠ;;;;;;
select * from {$tmp_write_table} a left join pay_log b on a.mb_id = b.pay_id WHERE (a.ad like '{$division} %' or b.pay_board like CONCAT('%', a.wr_id ,', %')) and b.pay_end_time > '{$g4['time_ymdhis']}' GROUP BY a.wr_id HAVING COUNT(a.wr_id) order by {$rand_code} limit 0, $rows
다음과 같은 쿼리문과 같은 동작을 하면서 더 빠른 쿼리 구조가 있을까요?
ps. 다시 봐도 막노동의 기억이 새록새록.... ㅎㅎ;;;;
ps2. ...mysql은... 아무리... 해도.... 안느네요 ㅠ.ㅠ;
댓글 전체
a.mb_id는 키가 설정되어있겠죠
b.pay_id도 키가 설정되어있을것같고.
b.pay_id, b.pay_end_time은 인덱스가 걸려있나요?
이 세가지 정도만 설정이 되어있어도 속도는 빨라질것 같습니다
그리고 다음의 like 문에서 앞쪽 '%'는 꼭 필요한것이 아니라면 빼는것이 속도가 빠를것입니다.
b.pay_board like CONCAT('%', a.wr_id ,', %')
b.pay_id도 키가 설정되어있을것같고.
b.pay_id, b.pay_end_time은 인덱스가 걸려있나요?
이 세가지 정도만 설정이 되어있어도 속도는 빨라질것 같습니다
그리고 다음의 like 문에서 앞쪽 '%'는 꼭 필요한것이 아니라면 빼는것이 속도가 빠를것입니다.
b.pay_board like CONCAT('%', a.wr_id ,', %')

pay_id는 중복된 데이터가 존재 가능하여 키설정이 안되구요
말씀 하신 b.pay_id, b.pay_end_time를 인덱스에 추가했는데 속도는 비슷하네요 ㅎㅎ
b.pay_board like CONCAT('%', a.wr_id ,', %') 이부분은 변경하면 일부 데이터 인식을 할수 없습니다 ㅠ.ㅠ;;;;
말씀 하신 b.pay_id, b.pay_end_time를 인덱스에 추가했는데 속도는 비슷하네요 ㅎㅎ
b.pay_board like CONCAT('%', a.wr_id ,', %') 이부분은 변경하면 일부 데이터 인식을 할수 없습니다 ㅠ.ㅠ;;;;

index 설정을 잡는거에 따라 속도가 차이가 나니
explain 으로 실행계획 한번 체크해서 올려주시면 좀더 확인하기가 수월할꺼 같습니다
explain 으로 실행계획 한번 체크해서 올려주시면 좀더 확인하기가 수월할꺼 같습니다

아 그렇군요!

흠.... 결국은 쿼리문은 참조 필드 추가를 해서 필요한 데이터만 불러오게 하여 수정 하였습니다.
select mb_id, company_name, end, wr_subject, type, location from {$tmp_write_table} a inner join pay_log b on a.mb_id = b.pay_id WHERE (a.ad like '{$division} %' or b.pay_board like CONCAT('%', a.wr_id ,', %')) and b.pay_end_time > '{$g4['time_ymdhis']}' GROUP BY a.wr_id HAVING COUNT(a.wr_id) order by {$rand_code} limit 0, $rows
select mb_id, company_name, end, wr_subject, type, location from {$tmp_write_table} a inner join pay_log b on a.mb_id = b.pay_id WHERE (a.ad like '{$division} %' or b.pay_board like CONCAT('%', a.wr_id ,', %')) and b.pay_end_time > '{$g4['time_ymdhis']}' GROUP BY a.wr_id HAVING COUNT(a.wr_id) order by {$rand_code} limit 0, $rows