[Hint]힌트는 이런식으로 사용합니다...
[Hint]사용 형식
1. 힌트 구문은 기본적으로 대소문자를 구별하지 않으며 SQL 블록에서 두 가지 형태가 가능 합니다.
형식1)
/*+ hint */ ……
형식2)
--+hint ……(--+다음에 공백이 있으면 안됩니다.)
--+ 보다는 /*+ 로 시작하는 형식을 많이 사용하는데 --+ 형식의 경우 일부 버전의 DB에서는 인식이 되지 않기 때문 입니다.
2. 힌트를 포함하는 주석은 SELECT, UPDATE, DELETE, INSERT 키워드 다음에만 사용할 수 있습니다.
3. 주석에 힌트가 여러 개 있으면 각 힌트는 공백으로 구분되어야 합니다.
SQL>SELECT /*+ FULL(E) INDEX(D pk_dept) */ e.ename, d.dname
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO
3. From절 다음에 테이블 alias를 사용한 경우에 힌트 문에 테이블 명이 와야 한다면 반드시 Alias명을 기술하도록 해야 합니다.
SQL>SELECT /*+ FULL(E) */ * FROM EMP E;
4. 힌트 구문이 잘못 사용되었더라도 SQL 문장이 올바르면 실행됩니다.
5. 구문 오류가 있는 힌트 문장을 무시하지만 같이 쓰여진 것 중에 올바른 힌트가 있다면 이는 인정을 합니다.
아래에서 FULLL이 잘못 쓰여 졌지만 INDEX(D pk_dept) 힌트는 인정됩니다.
SQL>SELECT /*+ FULLLL(E) INDEX(D pk_dept) */ e.ename, d.dname
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO
6. 만약 힌트구문이 여러 개 쓰였는데 이들끼리 콤마(,)로 구분 되었다면 ’/*’ 부터 ‘,’ 사이의 힌트 구문까지만 유효합니다.
아래의 경우 FULL(E) 까지만 유효합니다.
SQL>SELECT /*+ FULL(E) , INDEX(D pk_dept) */ e.ename, d.dname
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO
7. 힌트 구문간의 ‘,’가 아니라 힌트내의 인자를 취하는 구문에서 인자간의 구분을 위해 ‘,’을 사용하는 경우는 유효 합니다.
아래의 두 경우 모두 유효 합니다.
SQL>SELECT /*+ INDEX(E idx_ename) */
EMPNO, ENAME
FROM EMP E
WHERE ENAME = ‘홍길동’;
SQL>SELECT /*+ INDEX(E, idx_ename) */
EMPNO, ENAME
FROM EMP E
WHERE ENAME = ‘홍길동’;
8. 아래의 예를 참고 하세요.
SQL>SELECT /*+ FULL(SCOTT.EMP) */ * FROM EMP;(X)
SQL>SELECT /*+ FULL(EMP) */ * FROM SCOTT.EMP;(O)
SQL>SELECT /*+ FULL(E) */ * FROM SCOTT.EMP E;(O)
9. 일부 데이터베이스 개발 툴에서 힌트 구문이 먹히지 않는 경우가 있는데 이는 힌트를 주석으로 간주해 버려서 입니다.(토드 나 오렌지 등은 힌트를 정확히 인식합니다.) 이 경우 힌트가 있는 문장을 뷰로 만들어 이용하면 되는데 아래를 참고하세요.
만약 다음과 같은 힌트 문장이 인식되지 않는다면…
SQL>SELECT /*+ INDEX(E idx_ename) */ *
FROM EMP E
WHERE ENAME = ‘홍길동’;
다음처럼 뷰를 만듭니다.
SQL>CREATE OR REPLACE VIEW V_EMP AS
SELECT /*+ INDEX(E idx_ename) */ *
FROM EMP E;
뷰를 질의 합니다.
SQL>SELECT *
FROM V_EMP
WHERE ENAME = ‘홍길동’;
'프로그래밍 > oracle' 카테고리의 다른 글
oracle - 오라클 CLOB 타입 검색 (0) | 2012.08.17 |
---|---|
oracle - 25가지 효율적인 SQL 작성법 (0) | 2012.08.17 |
oracle - [Hint]조인순서 변경(STAR_TRANSFORMATION) (0) | 2012.08.17 |
oracle - [Hint]조인순서 변경(STAR) (0) | 2012.08.17 |
oracle - [Hint]조인순서 변경(ORDERED) (0) | 2012.08.17 |