오라클 힌트 꼭 써야 하나?(why using hint?)
오라클 힌트는 오라클 옵티마이저에게 SQL문 실행을 위한 데이터를 스캐닝하는 경로, 조인하는 방법등을 알려주기 위해 SQL사용자가 SQL구문에구사하는 것입니다. 오라클이 아무리 똑똑하다 하더라도 늘 최적의 실행경로를 만들어 내기는 불가능 하죠, 최적의 실행경로는 데이터의 구조를 가장 잘아는 사람이 만들어 낼 수도 있기 때문이다.
- 힌트, 인덱스, 조인의 개념을 정확히 알고 사용하지 않은 무분별한 힌트의 사용은 자제되어야 합니다. (물론 힌트에 오타가 있다든지 하는 경우는 큰 관계 없습니다. 잘못 사용된 힌트는 무시되므로 없는것처럼 동작하기 때문이죠)
- 힌트를 사용하는 이유는 최적의 실행경로를 알고 있다면 비가오나 눈이오나 일정한 최적의 실행계획을 가지기 위해서 입니다. CBO에서 가끔 오라클 옵티마이저가 만드는 실행 계획은 데이터 상황에 따라 이랬다 저랬다 할 수 있습니다.
- 데이터 값을 정렬해야 되는 다음과 같은 상황이라면 반드시 힌트를 써야 합니다.
(URL에서 확인하세요)
http://ojc.asia/bbs/board.php?bo_table=LecHINT&wr_id=220
- like같은 것을 사용한 후 테이블을 조인하면 실행계획의 이상이 발생할 수 있으므로 실행계호기의 이상을 방지하기 위해 힌트를 써야 합니다. 기타 여러경우의 실행계획 이상이 나타날 수 있으며 이러한 경우 힌트를 적절히 구사해서 최적의 실행경로를 만들어 내야 합니다.
다음 URL에서 그 내용을 참고 하세요.
http://ojc.asia/bbs/board.php?bo_table=LecHINT&wr_id=187
- 드라이빙 테이블등을 원하는대로 선정하고자 할때 힌트 써야되죠...
(다음 URL에서 확인 바랍니다.)
http://ojc.asia/bbs/board.php?bo_table=LecHINT&wr_id=182
- INSERT...SELECT 구문등에서 키칼럼의 중복되는 값때문에 무결성 제약조건으로 오류발생하는 경우(다음 URL에서 확인하세요)
http://ojc.asia/bbs/board.php?bo_table=LecHINT&wr_id=159
결론 : 힌트를 써야 되냐, 말아야 되냐면 반드시 써야되는 상황이 있고, 알고 제대로 쓰면 튜닝에 많은 도움이 된다고 이야기하고 싶다. 즉 힌트를 써야 되냐 말아야 되냐 보다는 데이터를 추출할 때 인덱스를 이용하여 효율적으로 데이터를 추출하도록 쿼리가 구성되야 하며 조인의 경우에도 드라이빙 테이블 및 조인의 방향, 조인의 종류 및 원리에 대해 알고 쿼리 및 힌트를 사용해야 한다는 것이다.
힌트를 안써도 대부분의 CBO에서는 데이터를 효율적으로 잘 가지고 오는데 굳이 잘못 기술된
힌트구문으로 성능을 떨어 뜨리는 경우는 없어야 겠죠
대부분 개발시 누구가 어떤 힌트를 쓰니까 빨라졌다더라!! 해서 비슷해 보이는 모든 쿼리에
관련 힌트를 남발하는 분들도 계시죠^^ 그런것은 자제하시는 것이 좋구요,
여하간 잘알고 잘쓰면 도움되지만 애매한 상황이고 잘모르는데 남들이 쓰니까 나도 쓴다면 오라클이 힘들어 할 수도 있으니 조심 해야 합니다.
대한민국 모든 개발자, DBA 분들이 쿼리를 잘 쓰는 그날을 위해...
감사합니다.
오라클 힌트는 오라클 옵티마이저에게 SQL문 실행을 위한 데이터를 스캐닝하는 경로, 조인하는 방법등을 알려주기 위해 SQL사용자가 SQL구문에구사하는 것입니다. 오라클이 아무리 똑똑하다 하더라도 늘 최적의 실행경로를 만들어 내기는 불가능 하죠, 최적의 실행경로는 데이터의 구조를 가장 잘아는 사람이 만들어 낼 수도 있기 때문이다.
- 힌트, 인덱스, 조인의 개념을 정확히 알고 사용하지 않은 무분별한 힌트의 사용은 자제되어야 합니다. (물론 힌트에 오타가 있다든지 하는 경우는 큰 관계 없습니다. 잘못 사용된 힌트는 무시되므로 없는것처럼 동작하기 때문이죠)
- 힌트를 사용하는 이유는 최적의 실행경로를 알고 있다면 비가오나 눈이오나 일정한 최적의 실행계획을 가지기 위해서 입니다. CBO에서 가끔 오라클 옵티마이저가 만드는 실행 계획은 데이터 상황에 따라 이랬다 저랬다 할 수 있습니다.
- 데이터 값을 정렬해야 되는 다음과 같은 상황이라면 반드시 힌트를 써야 합니다.
(URL에서 확인하세요)
http://ojc.asia/bbs/board.php?bo_table=LecHINT&wr_id=220
- like같은 것을 사용한 후 테이블을 조인하면 실행계획의 이상이 발생할 수 있으므로 실행계호기의 이상을 방지하기 위해 힌트를 써야 합니다. 기타 여러경우의 실행계획 이상이 나타날 수 있으며 이러한 경우 힌트를 적절히 구사해서 최적의 실행경로를 만들어 내야 합니다.
다음 URL에서 그 내용을 참고 하세요.
http://ojc.asia/bbs/board.php?bo_table=LecHINT&wr_id=187
- 드라이빙 테이블등을 원하는대로 선정하고자 할때 힌트 써야되죠...
(다음 URL에서 확인 바랍니다.)
http://ojc.asia/bbs/board.php?bo_table=LecHINT&wr_id=182
- INSERT...SELECT 구문등에서 키칼럼의 중복되는 값때문에 무결성 제약조건으로 오류발생하는 경우(다음 URL에서 확인하세요)
http://ojc.asia/bbs/board.php?bo_table=LecHINT&wr_id=159
결론 : 힌트를 써야 되냐, 말아야 되냐면 반드시 써야되는 상황이 있고, 알고 제대로 쓰면 튜닝에 많은 도움이 된다고 이야기하고 싶다. 즉 힌트를 써야 되냐 말아야 되냐 보다는 데이터를 추출할 때 인덱스를 이용하여 효율적으로 데이터를 추출하도록 쿼리가 구성되야 하며 조인의 경우에도 드라이빙 테이블 및 조인의 방향, 조인의 종류 및 원리에 대해 알고 쿼리 및 힌트를 사용해야 한다는 것이다.
힌트를 안써도 대부분의 CBO에서는 데이터를 효율적으로 잘 가지고 오는데 굳이 잘못 기술된
힌트구문으로 성능을 떨어 뜨리는 경우는 없어야 겠죠
대부분 개발시 누구가 어떤 힌트를 쓰니까 빨라졌다더라!! 해서 비슷해 보이는 모든 쿼리에
관련 힌트를 남발하는 분들도 계시죠^^ 그런것은 자제하시는 것이 좋구요,
여하간 잘알고 잘쓰면 도움되지만 애매한 상황이고 잘모르는데 남들이 쓰니까 나도 쓴다면 오라클이 힘들어 할 수도 있으니 조심 해야 합니다.
대한민국 모든 개발자, DBA 분들이 쿼리를 잘 쓰는 그날을 위해...
감사합니다.
댓글 없음:
댓글 쓰기