T

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

· 2012-08-08 (수) 15:41:35 · 1049 · 5
제가 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 ,', %') 이부분은 변경하면 일부 데이터 인식을 할수 없습니다 ㅠ.ㅠ;;;;
2012-08-09 (목) 04:34:33
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 질문답변

66,531건

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

+
제목 글쓴이 날짜 조회
12-08-08 조회 1,643
12-08-08 조회 825
12-08-08 조회 1,085
12-08-08 조회 1,232
12-08-08 조회 1,140
12-08-08 조회 1,050
12-08-08 조회 1,644
12-08-08 조회 928
12-08-08 조회 1,687
12-08-08 조회 1,050
12-08-08 조회 3,994
12-08-08 조회 1,615
12-08-08 조회 1,867
12-08-08 조회 695
12-08-08 조회 558
12-08-08 조회 538
12-08-08 조회 700
12-08-08 조회 1,672
12-08-08 조회 1,387
12-08-08 조회 935