동일 쿼리 속도 차이 문제 0 3 6,128

by 오래맑음 로직쿼리 쿼리속도 동일쿼리속도 차이 [2009.02.05 09:58:23]


자바, 오라클을 이용해서 대용량 데이터 베이스 개발을 하고 있는 개발자 입니다.

SQL문도 직접 코딩해서 사용 하고 있는데 한가지 문제가 발생해서 질문을 드립니다.

집계 테이블 (천만건 이상의 테이블 3~4개를 조인해서 필요한 3만건 정도의 데이터를 매일 매일 갱신하는 데이블 입니다.) 을 새로 생성해서 신규 생성한 테이블을 사용해서 쿼리를 만들었습니다.

헌데, 사용하는 툴(오렌지)에서는 쿼리 러닝타임이 3~4초 정도인 쿼리를 실제 자바의 PrepareStatement 에 작용해서 쿼리를 실행 해 보면 정확히 70초가 걸려서 결과가 출력 됩니다. (쿼리를 실핵하기 직전과 직후 로그를 남겨 확인 헀습니다.)

이런일이 발생했을때 어떻게 대체 해야 하는지, 구체적인 대처방안이 없다면 왜 이런일이 발생 하는지 너무 궁금해서 여쭤봅니다.

by 웅 [2009.02.05 10:25:00]
프로그램에서 변수를 바인드처리하고 오랜지에서는 변수대신 상수를 쓰시지 않았을까하는데요..아래와 비슷한 상황인듯싶습니다.
http://www.gurubee.net/article/23517

by 피터 [2009.02.05 10:27:41]
1. 쿼리레벨에서의 변경 테스트
오렌지에서 쿼리 테스트 하실때 자바에서처럼 바인드변수를 이용하여 테스트해보시고 튜닝해보셔야 합니다. 값을 직접 적어넣고 실행하실때와 바인드변수를 사용할때는 오라클이 인식하는 쿼리가 다르기 때문에 속도차이가 날 수 있습니다.

2. 자바레벨에서의 변경 테스트
리터럴쿼리로 인한 문제가 있을 수 있지만 쿼리상의 변수의 값이 그리 많이 바뀌지 않는다면 PrepareStatement 를 이용하여 문제가 있다면 그냥 Statement 를 이용하여 보시는 것도 한가지 방법이 될 수 있습니다.

by 오래맑음 [2009.02.05 11:01:22]
많은 댓글 감사 합니다.
웅님의 말씀 하신 게시글을 보고 일단은
바인딩을 피하고 쿼리분에 직접 변수를 넣는 방법으로 해결 했습니다.
피터님의 말씀 처럼 쿼리레벨에서 테스트 할때도 바인딩 변수를 활용해서 테스트를 해야 할것 같군요.

답글 감사 드립니다 ^^*
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입