사용자 함수 속도 0 3 1,137

by 잡초 [2017.04.03 16:06:38]


안녕하세요

프로시져를 실행하는데 원래는 1초도 안걸렸어요

근데 사용자 함수를 만들어서 사용했더니 4분이나 걸리더라구요

SELECT A,
                 B,
                (SELECT FUNCTION(A) FROM DUAL)

FROM    TABLE

이런식으로 사용하면 그나마 쿼리 속도를 높일 수 있다고 해서 쓰긴했는데 여전히 4분이나 걸리네요

 

함수를 쓰면서 시간을 단축시키고 싶은데 혹시 방법이 있을까요? 

by 마농 [2017.04.03 16:33:56]

함수 내부 로직을 확인하고 비효율을 찾아 제거해야죠.
함수 내부 쿼리에 사용되는 테이블 컬럼에 적절한 인덱스가 있는지 확인하세요.


by 잡초 [2017.04.03 16:55:05]

답변 감사합니다!

역시 그 방법 밖에 없나요 주륵...

 


by jkson [2017.04.03 17:25:14]

함수는 총 출력되는 row 마다 반복되기 때문에 좀 무겁습니다.

함수 자체에 쿼리가 없어도 느린데 쿼리까지 있으면 더 느리겠죠.

말씀하신 dual과 함께 스칼라서브 쿼리형태로 바꾸면 스칼라서브쿼리 캐싱 효과로

같은 입력값에 대해서는 함수를 수행하지 않고 기존에 수행하였던 결과값을 재활용하게 됩니다.

row마다 함수로 던져주는 값이 거의 비슷한 값이라면 빨라지겠지만 다른 값이 계속 주어진다면

효과가 없겠죠.

함수를 없애고 스칼라서브쿼리로 바꿀 수 있는지 먼저 검토해보시고 정~~ 어렵다면

함수로 구현하되 함수 내부의 쿼리도 비효율이 없도록 만드셔야 전체 쿼리 속도가 올라갈겁니다.

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