튜닝 문의 0 6 1,550

by 박성준 [2006.05.02 09:05:07]


SELECT A.SIMTIME,A.MSGTYPE,A.SIDE,A.PLATFORMID,A.PLATNAME,A.SENSORCLASS,B.TARGETID   

 FROM DETECT_RESULT A,DETECT_TARGET_IMINT B 

WHERE A.SENSORCLASS = 53

          AND A.SIMTIME = B.SIMTIME

          AND A.PLATFORMID=B.PLATFORMID

          AND A.SIMTIME >= 20060501154033

          AND A.SIMTIME <= 20060501161535

          AND A.PLATFORMID IN (25520,481,482) 

           AND SIDE=1

order by A.PLATFORMID

 

위와 같은 두개의 테이블로 QUARY 문장을 생성 했는데 속도가 많이 느려서요.

무엇보다도  A.PLATFORMID IN (25520,481,482) 부분이 항목이 많이 추가되는 사항이 있을수 있는데 효과 적인 사용 방법 부탁 드립니다

by chanho [2006.05.02 00:00:00]
in..대신 exists 사용해 보시지요~

by 구경꾼 [2006.05.02 00:00:00]
튜닝질문 기본은 인덱스 구성과 실행계획을 올려줘야 그거 보고 판단하던가 하죠. 아무것두 없는 상태에서 질문자 개인 생각을 적어 놓으면 적합한 답을 얻을수 없을겁니다

by akira [2006.05.03 00:00:00]
아마도 지금 올리신 쿼리문만 본다면 아마도 A테이블이 드라이빙될텐데요. 드리이빙된 후에 B테이블과 조인을 하면서 얼마만큼의 B테이블과 랜덤액세스가 발생하는가에 따라서 속도는 엄청나게 달라질거라고 생각됩니다. 또한가지 인덱스가 어떻게 되어있는지 몰라서 말씀드리기가 어렵습니다만 혹시 simtime column에 인덱스가 있다면 지금처럼 범위조건을 주지마시고 a.simtime in (select simtime from detectresult where simtime >= 20060501154033 and simtime <= 20060501161535)로 한번 바꿔보십시요.
simtime에 인덱스가 있다면 이렇게 조건을 바꾸어 사용하시는게 인덱스사용 효율이 처음 사용하신 조건보다는 좋아 질거라고 생각합니다.

by 나그네 [2006.05.04 00:00:00]
일단, driving될 테이블의 join량을 먼저 줄여주는게 어떨지 생각되네요.. 더 중요한 것은 index 컬럼이 어떤건지도 중요한데, 위 문장만을 보기엔 무언지 잘 모르겠네요..

하지만, driving될 table의 건수를 먼저 줄이기 위해서
where절을 아래와 같이 하면 어떨까요?

WHERE A.SENSORCLASS = 53
AND A.SIMTIME >= 20060501154033
AND A.SIMTIME <= 20060501161535
AND A.PLATFORMID IN (25520,481,482)
AND A.SIMTIME = B.SIMTIME
AND A.PLATFORMID = B.PLATFORMID
AND SIDE = 1

index 컬럼 및 각 테이블 건수를 올려 주셨으면 좋았을텐데.. 아쉽군요..

by 나그네 [2006.05.04 00:00:00]
위 sql의 plan을 보여주셨더라면 아주 좋았을 듯 한데.. 역시 아쉽군요..

by 박성준 [2006.05.09 00:00:00]
많은 답변 감사 합니다
SQL> create index detect_result_indx ON detect_result(simtime);
위와 같이 인덱스를 적용 했구여
DETECT_RESULT 중에서 SENSORCLASS=53은 DETECT_TARGET_IMINT 테이블을 표현합니다. 헌데DETECT_RESULT의 데이터가 123462건 있습니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입