[DB] 힌트절(HINT)


출처 : http://blog.naver.com/thesot?Redirect=Log&logNo=70130641019

힌트란? 

힌트는 SQL을 실행계획을 제어하는 도구이다. 데이터베이스의 실행계획을 주도하는 옵티마이저에게 원하는 실행 계획으로

유도하도록 사용된다. 이와 같은 힌트는 옵티마이저에의해 선택될 수도 있고 버려질 수도 있다.

 

 

 힌트의 특징 네가지!

1. 실행 계획을 제어한다.

  - SQL이 우리가 원하는 실행 계획이 생성되지 않은 경우 여러가지 방법으로 우리는 실행계획을 제어할수 있다.

 새로운 인덱스를 생성하는 경우도 있고, SQL에 힌트를 설정하여 옵티마이저에게 올바른 실행 계획을 생성하도록 유도할 수 있다.

따라서 힌트는 실행계획을 원하는 방향으로 유도하기 위해 사용하는 한가지 방법이다.

 

2. 에러가 발생하지 않는다.

 - 힌트는 잘못 작성하여도 해당 SQL은 에러를 발생시키지 않는다.

  물론 힌트의 시작 /*+ 와 끝 */ 은 문법에 맞게 작성되어야한다. 힌트를 잘못 사용해도 에러가 발생하지 않기 때문에 힌트가 잘못되었는지 항상 확인해야 한다.

 

3. 선택 또는 취사될 수 있다.

  - 힌트의 문법이 올바르더라도 힌트는 옵티마이저에의해 버려질수도 있고 선택되어질 수도 있다. (힌트의 취사선택)

 

4. 다양한 종류가 존재한다.

 - 매우 다양한 종류의 힌트가 있으며 버전업이 될때마다 계속 추가된다.

 

 트의 종류

 1. 옵티마이저 관련 힌트

    비용기반 옵티마이저  : 테이블 또는 인덱스의 통계 정보를 이용하여 SQL의 실행계획 생성

    규칙기반 옵티마이저  : SQL의 문법과 인덱스의 구성 컬럼등을 기준으로 실행계획 작성 (현재는 지원중지 고려대상X)

 

  비용기반 옵티마이저 관련 힌트

 

 

 

 2. 조인 순서 관련 힌트

테이블의 엑세스 순서는 조인의 성능을 좌우할 정도로 매우 중요함

조인의 순서만으로 조인의 SQL을 최적화 할수 있을 정도로 중요하다.

 

 

 

 3. 조인 방식 관련 힌트

조인은 순서만이 성능을 좌우하는것이 아니다.

조인을 수행하는 두 테이블 사이에 어떤 방식을 사용하는가에 따라서 조인의 성능이 좌우된다.

 

 

 

 

중첩 루프 조인 (NESTED LOOP JOIN)

  드라이빙 테이블의 처리범위를 하나씩 엑세스 하면서 그 추출된 값으로 연결할 INNER 테이블을 조인하는 방식

 

해쉬 조인

 대용량 데이터를 처리하기 위해 사용하며 메모리에 해쉬 영역을 사용하여 조인을 수행

 

소트 머지 조인

양쪽 테이블을 각자 엑세스하여 처리 범위를 줄이고, 조인컬럼 순으로 데이터를 SORT 한 후에 조인하는 방식

 

 

4. PARALLEL 관련 힌트

 

 여러개의 프로세스를 이용하여 작업을 수행하기 위해 사용하는 힌트이다.

 

 

 

 

 PARALLEL - 테이블을 여러개의 프로세스로 엑세스하는 경우 또는 여러 프로세스로 DML을 수행하는 경우 사용가능하다.

테이블 이름과 PARALLEL PROCESSING 개수를 변수로 설정하여 사용한다.

 

NOPARALLEL - PARALLEL PROCESSING 을 사용하지 않는 힌트이다. (수행 방지)

 

APPEND - 해당 힌트는 PARALLEL PROCESSING 관련 힌트는 아니지만, INSERT 작업 시 직접 로딩을 수행하는 경우

 사용하는 힌트이며 대용량의 데이터 INSERT 작업 에는 탁월한 성능을 보장하는 힌트이다.

INSERT 시에 PARALLEL 힌트를 설정하게 되면 해당 INSERT 작업은 기본적으로 APPEND 힌트를 포함하게 된다.

 

 

5. 인덱스 관련힌트

 

 인덱스의 실행계획이 많았던것처럼 인덱스 관련 힌트 종류도 많으며 가장 많이 사용된다.

 

 

6. SQL 의 변형 관련 힌트 (쿼리 트랜스폼 관련)

 

 SQL 변형 힌트는 앞에서 살펴봤던 옵티마이저 의한 쿼리 변환을 유도하는 힌트이다.

 내용이 어렵고 쓰기 어렵지만 잘 숙지해서 사용한다면 매우 유용한 힌트이다.

 



[출처] 9. 힌트의 사용|작성자 따개비


저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License