HINT 기본 30 가지 사용법

SQL 문 구 를 최적화 하 는 과정 에서 hint 를 자주 사용 합 니 다. 다음은 SQL 최적화 과정 에서 흔히 볼 수 있 는 Oracle 에서 'HINT' 의 30 가지 용법 을 소개 합 니 다.
1. /*+ALL_ROWS*/
이 는 어구 블록 에 대해 지출 을 바탕 으로 하 는 최적화 방법 을 선택 하고 가장 좋 은 스루풋 을 얻어 자원 소 모 를 최소 화 하 는 것 을 나타 낸다.
예 를 들 면:
SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_IN 
FROM BSEMPMS WHERE EMP_NO='SCOTT';

2. /*+FIRST_ROWS*/
문장 블록 에 대한 지출 기반 의 최적화 방법 을 선택 하고 가장 좋 은 응답 시간 을 얻어 자원 소 모 를 최소 화 하 는 것 을 나타 낸다.
예 를 들 면:
SELECT /*+FIRST_ROWS*/ EMP_NO,EMP_NAM,
DAT_IN FROM BSEMPMS WHERE EMP_NO='SCOTT';

3. /*+CHOOSE*/
데이터 사전 에 방문 표 의 통계 정보 가 있 으 면 씀 씀 이 최적화 방법 을 바탕 으로 가장 좋 은 스루풋 을 얻 을 수 있 음 을 나타 낸다.
데이터 사전 에 방문 표 의 통계 정보 가 없 으 면 규칙 에 따라 지출 하 는 최적화 방법 을 나타 낸다.
예 를 들 면:
SELECT /*+CHOOSE*/ EMP_NO,EMP_NAM,
DAT_IN FROM BSEMPMS WHERE EMP_NO='SCOTT';

4. /*+RULE*/
문장 블록 에 대한 규칙 에 기초 한 최적화 방법 을 선택 하 는 것 을 나타 낸다.
예 를 들 면:
SELECT /*+ RULE */ EMP_NO,EMP_NAM,DAT_IN 
FROM BSEMPMS WHERE EMP_NO='SCOTT';

5. /*+FULL(TABLE)*/
표 에 대해 전역 스 캔 방법 을 선택 하 는 것 을 나타 낸다.
예 를 들 면:
SELECT /*+FULL(A)*/ EMP_NO,EMP_NAM FROM 
BSEMPMS A WHERE EMP_NO='SCOTT';

6. /*+ROWID(TABLE)*/
힌트 는 지 정 된 표 에 대해 ROWID 에 따라 접근 하 는 것 을 명확 하 게 나타 낸다.
예 를 들 면:
SELECT /*+ROWID(BSEMPMS)*/ * FROM BSEMPMS 
WHERE ROWID>='AAAAAAAAAAAAAA'
AND EMP_NO='SCOTT';

7. /*+CLUSTER(TABLE)*/
지정 한 표 에 대해 서 는 클 러 스 터 스 캔 을 선택 하 는 접근 방법 을 명확 하 게 표시 합 니 다. 클 러 스 터 대상 에 만 유효 합 니 다.
예 를 들 면:
SELECT /*+CLUSTER */ BSEMPMS.EMP_NO,
DPT_NO FROM BSEMPMS,BSDPTMS
WHERE DPT_NO='TEC304' 
AND BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;

8. /*+INDEX(TABLE INDEX_NAME)*/
표 에 색인 을 선택 하 는 검색 방법 을 표시 합 니 다.
예 를 들 면:
SELECT /*+INDEX(BSEMPMS SEX_INDEX) 
USE SEX_INDEX BECAUSE THERE ARE FEWMALE 
BSEMPMS */ FROM BSEMPMS WHERE SEX='M';

9. /*+INDEX_ASC(TABLE INDEX_NAME)*/
표 에 대한 색인 상승 순 서 를 선택 하 는 검색 방법 을 표시 합 니 다.
예 를 들 면:
SELECT /*+INDEX_ASC(BSEMPMS PK_BSEMPMS) */ FROM BSEMPMS 
WHERE DPT_NO='SCOTT';

10. /*+INDEX_COMBINE*/
지정 표를 위해 비트 맵 접근 경 로 를 선택 하 십시오. 만약 INDEXCOMBINE 에 서 는 인자 인덱스 가 제공 되 지 않 으 며, 비트 맵 인덱스 의 불 조합 방식 을 선택 합 니 다.
예 를 들 면:
SELECT /*+INDEX_COMBINE(BSEMPMS SAL_BMI 
HIREDATE_BMI)*/ * FROM BSEMPMS
WHERE SAL<5000000 AND HIREDATE<SYSDATE;

11. /*+INDEX_JOIN(TABLE INDEX_NAME)*/
명령 유 틸 리 티 가 접근 경로 로 색인 을 사용 하 는 것 을 명확 하 게 알려 줍 니 다.
예 를 들 면:
SELECT /*+INDEX_JOIN(BSEMPMS 
SAL_HMI HIREDATE_BMI)*/ SAL,HIREDATE
FROM BSEMPMS WHERE SAL<60000;

12. /*+INDEX_DESC(TABLE INDEX_NAME)*/
표 에 색인 내림차 순 을 선택 하 는 검색 방법 을 표시 합 니 다.
예 를 들 면:
SELECT /*+INDEX_DESC(BSEMPMS PK_BSEMPMS) */ FROM BSEMPMS 
WHERE DPT_NO='SCOTT';

13. /*+INDEX_FFS(TABLE INDEX_NAME)*/
지정 한 표 에 대해 서 는 전체 표 스 캔 방법 이 아니 라 빠 른 전체 색인 스 캔 을 실행 합 니 다.
예 를 들 면:
SELECT /*+INDEX_FFS(BSEMPMS IN_EMPNAM)*/ * FROM BSEMPMS 
WHERE DPT_NO='TEC305';

14. /*+ADD_EQUAL TABLE INDEX_NAM1,INDEX_NAM2,...*/
계획 을 실행 하 는 선택 을 명확 하 게 제시 하고 몇 개의 단일 색인 스 캔 을 합 칩 니 다.
예 를 들 면:
SELECT /*+INDEX_FFS(BSEMPMS IN_DPTNO,
IN_EMPNO,IN_SEX)*/ * FROM BSEMPMS 
WHERE EMP_NO='SCOTT' AND DPT_NO='TDC306';

15. /*+USE_CONCAT*/
검색 중인 WHERE 뒤의 OR 조건 을 UNION ALL 로 변환 하 는 조합 검색 을 진행 합 니 다.
예 를 들 면:
SELECT /*+USE_CONCAT*/ * FROM BSEMPMS 
WHERE DPT_NO='TDC506' AND SEX='M';

16. /*+NO_EXPAND*/
WHERE 뒤의 OR 또는 IN - LIST 에 대한 검색 어, NOEXPAND 는 최적화 기 를 기반 으로 확장 하 는 것 을 막 을 것 입 니 다.
예 를 들 면:
SELECT /*+NO_EXPAND*/ * FROM BSEMPMS WHERE DPT_NO='TDC506' AND SEX='M';

17./*+NOWRITE*/
쿼 리 블록 에 대한 쿼 리 재 작성 을 금지 합 니 다.
18./*+REWRITE*/
보 기 를 매개 변수 로 할 수 있 습 니 다.
19. /*+MERGE(TABLE)*/
보기 의 각 조 회 를 합 칠 수 있 습 니 다.
  :SELECT /*+MERGE(V) */ A.EMP_NO,A.EMP_NAM,
B.DPT_NO FROM BSEMPMS A (SELET DPT_NO
,AVG(SAL) AS AVG_SAL FROM BSEMPMS B 
GROUP BY DPT_NO) V WHERE A.DPT_NO=V.DPT_NO
AND A.SAL>V.AVG_SAL;

20. /*+NO_MERGE(TABLE)*/
통합 가능 한 보기 가 있 으 면 더 이상 통합 되 지 않 습 니 다.
예 를 들 면:
SELECT /*+NO_MERGE(V) */ A.EMP_NO,
A.EMP_NAM,B.DPT_NO FROM BSEMPMS A 
(SELECT DPT_NO,AVG(SAL) 
AS AVG_SAL FROM BSEMPMS B GROUP BY DPT_NO) 
V WHERE A.DPT_NO=V.DPT_NO AND A.SAL>V.AVG_SAL;

21. /*+ORDERED*/
표 가 FROM 에 나타 나 는 순서에 따라 ORDERED 는 ORACLE 를 이 순서에 따라 연결 합 니 다.
예 를 들 면:
SELECT /*+ORDERED*/ A.COL1,B.COL2,C.COL3 FROM 
TABLE1 A,TABLE2 B,TABLE3 C WHERE A.COL1=B.COL1 AND B.COL1=C.COL1;

22. /*+USE_NL(TABLE)*/
지정 한 표 와 끼 워 넣 은 연결 줄 의 원본 을 연결 하고 지정 한 표를 내부 표 로 합 니 다.
예 를 들 면:
SELECT /*+ORDERED USE_NL(BSEMPMS)*/ BSDPTMS.DPT_NO,
BSEMPMS.EMP_NO,BSEMPMS.EMP_NAM FROM BSEMPMS,BSDPTMS
WHERE BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;

23. /*+USE_MERGE(TABLE)*/
지정 한 시 계 를 다른 줄 과 병합 정렬 연결 방식 으로 연결 합 니 다.
예 를 들 면:
SELECT /*+USE_MERGE(BSEMPMS,BSDPTMS)*/ * 
FROM BSEMPMS,BSDPTMS WHERE 
BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;

24. /*+USE_HASH(TABLE)*/
지정 한 시 계 를 다른 줄 과 해시 연결 방식 으로 연결 합 니 다.
예 를 들 면:
SELECT /*+USE_HASH(BSEMPMS,BSDPTMS)*/ * 
FROM BSEMPMS,BSDPTMS 
WHERE BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;

25. /*+DRIVING_SITE(TABLE)*/
ORACLE 가 선택 한 위치 와 다른 테이블 을 강제로 조회 하여 실행 합 니 다.
예 를 들 면:
SELECT /*+DRIVING_SITE(DEPT)*/ * 
FROM BSEMPMS,DEPT@BSDPTMS 
WHERE BSEMPMS.DPT_NO=DEPT.DPT_NO;

26. /*+LEADING(TABLE)*/
지정 한 시 계 를 연결 순서 의 첫 번 째 표 로 합 니 다.
27. /*+CACHE(TABLE)*/
전체 표 스 캔 을 진행 할 때, CACHE 는 표 의 검색 블록 을 버퍼 캐 시 에서 최근 최소 목록 LRU 의 최근 사용 단 에 배치 할 수 있 음 을 알려 줍 니 다.
예 를 들 면:
SELECT /*+FULL(BSEMPMS)
 CAHE(BSEMPMS) */ EMP_NAM FROM BSEMPMS;

28. /*+NOCACHE(TABLE)*/
전체 표 스 캔 을 진행 할 때, CACHE 는 표 의 검색 블록 을 버퍼 캐 시 에서 최근 최소 목록 LRU 의 최근 사용 단 에 배치 할 수 있 음 을 알려 줍 니 다.
예 를 들 면:
SELECT /*+FULL(BSEMPMS) NOCAHE(BSEMPMS) 
*/ EMP_NAM FROM BSEMPMS;

29./*+APPEND*/
표 의 마지막 에 직접 삽입 하면 속 도 를 높 일 수 있다.
insert /*+append*/ into 
test1 select * from test4 ;

30. /*+NOAPPEND*/
삽입 문 생존 기간 내 에 병렬 모드 를 중단 함으로써 일반적인 삽입 을 시작 합 니 다.
insert /*+noappend*/ 
into test1 select * from test4 ;

고전 용법:
1、/*+ leading(t) use_hash(t,kc09) full(kc09) parallel(kc09 4)*/

좋은 웹페이지 즐겨찾기