꾸뻑
님의 환경설정은 적절한 조치 입니다.
문제는 너무 많은 table join의 결과입니다.
보통 DB 가 data를 만들어 가져 올때 nature join한뒤에
거기서 where 조건대로 검색해서 가져 옴니다.
table 2개에서 한 1만개 씩 있을경우 1만 * 1만 개의
임시 table을 만든후 where 조건대로 선택함니다.
그러니 님의 5개 join은 memory 64에서는 무리가 됨니다.
(저의 경험으로 절대 해결하기 힘듬 )
기본적으로 1만건이상을 다룰려면 256MByte이상이 되어야 함니다.
그 이하일경우 index buffer가 너무 작기때문에
hdd와 swap을 해가면서 작동 하므로 속도가 현져하게 떨어짐니다.
( 대부분 이 swap 때문에 서버의 속도가 현저히 떨어짐
이것은 table설게시에 db사용 memory의 적절한 계산을 하지 못한결과임)
1. 우선 1차 적으로 temp table을 만들어 그곳으로 이동시킨후
헌꺼번에 처리하기 -> 현저히 빨라짐니다. ( join을 피할수있음 )
2. 새로운 최적화된 table을 만들서 새로 작성 -> 좋은 방법
새로 프로그램 해야함으로 시간이 많이 걸림
3. 지금 그대로 하되 memory를 적절히 늘리는 방법 -> 돈이 많이듬
추천하는 방법은 2번과3번을 동시에 하셔야 차후에도 안정적인
운영이 될것 같습니다.
꾸뻑.
> WinNT에서 MySQL(3.22.34-shareware)을 사용하고 있습니다.
> CPU:INTEL-450, 메모리:64M입니다...
> 그런데 문제는 데이타가 많아지면 SELECT문의 속도가 굉장히 늦어집니다.... 예를 들어서 해당건수가 1만개면 3분이상을 기다려야 한다는 것이죠...
> 그래서
> JOIN_BUFFER=2M,
> KEY_BUFFER=16M,
> SORT_BUFFER=4M,
> RECODER_BUFFER=1M로 변수값을 설정하였으나 결과는 마찬가지입니다...
> 이외에 다른 변수의 SETTING이 더 필요한 것인가요???
> 아래의 SELECT문은 실제로 사용하고 있는 것입니다...
> 꼭 답 좀 주세요...
>
> SELECT b.req_level,
> b.req_seq,
> b.parent_seq,
> b.msg_code,
> b.hit_count,
> b.subject ,
> b.contents,
> b.user_id,
> b.attach_flag,
> b.reg_date,
> u.user_name ,
> di.menu_code,
> d.dep_name,
> c.cate_name
> FROM BOARD_MSG_STB b,
> BOARD_MSG_DTB di,
> USER_MTB u,
> DEPART_MTB d,
> CATEGORY_MTB c
> WHERE b.del_flag = 0
> AND di.del_flag = 0
> AND di.menu_code = 8
> AND b.msg_code = di.msg_code
> AND b.user_id = u.user_id
> AND u.dep_code = d.dep_code
> AND b.cate_code = c.cate_code
> AND ( (
> b.open_public_type = 0
> OR ( b.sec_dep_flag = 1 AND b.msg_code IN ('2000090212051229358','2000090212293027524','2000090212312632344' ))
> OR ( b.sec_person_flag = 1 AND b.msg_code IN ('2000090212051229586'))
> OR ( b.sec_group_flag = 1 AND b.msg_code IN ('2000090212051229323','2000090212051229234'))
> )
> OR ( b.user_id = 'ddd')
> )
> AND (
> b.applicat_type = 1
> OR ( b.applicat_type = 0 AND b.slevel_code <= 10)
> OR ( b.user_id = 'ddd')
> )
> ORDER BY di.msg_seq DESC, b.req_seq LIMIT 0,10;
>
> 또 한가지 질문은 ORDER BY절에 LIMIT를 썼을 경우에 쿼리문의 속도에 어느정도의 영향을 미치는지 입니다....
>
> 그럼 답변 기다리겠습니다...
|