Mysql StoredProcedure 질문입니다. 0 4 1,132

by 클로이 [MySQL] [2016.05.02 10:47:33]


조회 sql들이 sp로 저장돼있는 시스템입니다.

이번에 튜닝 할 부분이 있어서, 인덱스 좀 잡고 조회 sql을 테스트 하는데...

동일 sql을 프로시저로 실행 하면 실행속도가 어마어마하게 차이가 납니다.

조회 되는 row수는 30000개 가량 되는데,

heidiSQL 쿼리탭에서 SQL로 동일 파라미터로 같은 조건을 주고 실행하면

0.3초만에 나오는 sql이

프로시저로 실행하면 5초이상 걸리네요 -_-;;

이게 대체 뭔 현상인지 잘 모르겠습니다.

 

혹시 이런 현상 겪으신 분들 계신가요...?

 

+ 이상하다 혹시나 해서 조회 sql에 order by 문을 주석 처리 해보니 같게 나오긴 합니다만..

정렬만 들어가면 다른 결과가 나오네요... 허허

by 아발란체 [2016.05.02 13:44:43]

정렬 항목은 인덱스 항목이 아닌가요?

그리고 3만 건에 대해 부분 패치로 빨리 보이는 것이 아닌지 확인하셨나요?

3만건 0.3초만에 조회 될 때 결과 그리드에 3만건 다 떠있나요? 아님 부분만 있고 계속 결과를 추가해서 보는 것인가요?


by 클로이 [2016.05.02 18:24:20]

네, 부분패치로 인한 현상은 아닙니다.

인덱스 태워서 나온 결과값입니다.

마농님이 지적해 주신대로, 상수로 파라미터를 대입한 경우엔 인덱스를 잘 타는데, 변수로 주니 문제가 생기는군요..

 

그에 따른 해결책도 아직 없네요.. -_ㅠ


by 마농 [2016.05.02 17:01:32]

프로시져에서는 변수로 조건 주고
쿼리 테스트 할때는 상수로 조건 준것 아닌가요?
테스트 시에도 변수로 테스트 해보세요.
양쪽 실행계획 비교도 해보세요.


by 클로이 [2016.05.02 18:22:44]

마농님 말씀대로 상수로 준 파라미터들이 문제였던 것 같습니다.

변수로 주고 같은 SQL을 돌려보니 , 실행계획이 다르네요.

이런 경우엔 어떻게 처리를 해야 하는 건가요..?

 

 데이터 타입이 문제인걸까요...?

원인은 찾았는데, 솔루션이 없네요 -_-;;;;

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