T

mysql 잘 하시는분 조언좀 부탁 드립니다.

제가 mysql에 약하다 보니.........
짜논것이.... 엄청 느리네요~ ㅠ.ㅠ;;;;;;

[code]
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
[/code]

다음과 같은 쿼리문과 같은 동작을 하면서 더 빠른 쿼리 구조가 있을까요?


ps. 다시 봐도 막노동의 기억이 새록새록.... ㅎㅎ;;;;
ps2. ...mysql은... 아무리... 해도.... 안느네요 ㅠ.ㅠ;
|

댓글 5개

a.mb_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 ,', %') 이부분은 변경하면 일부 데이터 인식을 할수 없습니다 ㅠ.ㅠ;;;;
index 설정을 잡는거에 따라 속도가 차이가 나니
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
댓글을 작성하시려면 로그인이 필요합니다. 로그인

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기 기존 게시물은 열람만 가능합니다.

+
제목 글쓴이 날짜 조회
13년 전 조회 1,534
13년 전 조회 726
13년 전 조회 971
13년 전 조회 1,119
13년 전 조회 1,027
13년 전 조회 951
13년 전 조회 1,527
13년 전 조회 817
13년 전 조회 1,570
13년 전 조회 954
13년 전 조회 3,878
13년 전 조회 1,506
13년 전 조회 1,760
13년 전 조회 597
13년 전 조회 457
13년 전 조회 443
13년 전 조회 576
13년 전 조회 1,560
13년 전 조회 1,280
13년 전 조회 823
🐛 버그신고