ROWNUM = 1 은 ROWNUM <= 1 로 사용하자

문제 : Bind 변수를 사용하지 하지 않아, Literal SQL 이 과다하게 수행
해결 : Literal SQL 제거 => Bind 변수로 변경 or CURSOR_SHARING (파라미터)의 설정 값 변경

CURSOR_SHARING (파라미터)의 설정 값 변경시 ROWNUM = 1 과 ROWNUM <= 1 의 작성형태에 따라 성능 편차가 발생할 수 있다.

  • CURSOR_SHARING = FORCE or SIMILAR 로 적용하였을 경우 동작차이

(1) ROWNUM = 1 ---> ROWNUM = :"SYS_B_0"
옵티마이저가 바인드 변수가 어떤 값으로 입력되는지 알 수가 없어 전체 데이터 검색 후 1건 추출하게 됨.
OPERATION은 COUNT로 보임.

(2) ROWNUM <= 1 ---> ROWNUM <= :"SYS_B_0"
COUNT STOPKEY 가 동작해서 1건만 추출 후 수행 종료됨.