질의에서 FROM 절에 나열된 테이블의 조인 순서는 질의 성능에 영향을 줄 수 있다. 만약 최적의 조인 순서를 결정 할 수 있다면, 질의에서 힌트로 조인 순서를 지정함으로써 질의 최적화기는 보다 효율적인 실행 계획을 만들어 낼 수 있다.
SELECT /*+ hint [ { hint } ... ] */
SELECT --+ hint [ { hint } ... ]
SELECT //+ hint [ { hint } ... ]
hint :
USE_NL[(spec-name[{, spec-name}...])]
USE_IDX[(spec-name[{, spec-name}...])]
USE_MERGE[(spec-name[{, spec-name}...])]
ORDERED
SQL 힌트는 더하기 기호와 주석을 사용하여 지정한다. CUBRID는 이 주석을 공백에 의해 구분된 힌트의 리스트로 해석한다. 힌트 주석은 반드시 키워드 SELECT 다음에 나타나야 하고, 더하기 기호(+)가 주석에서 첫 번째 문자로 시작되어야 한다.
힌트 |
설명 |
---|---|
USE_NL |
질의 최적화기는 중첩 루프 조인 실행 계획을 만든다. |
USE_IDX |
질의 최적화기는 연관된 인덱스 조인 실행 계획을 만든다. |
USE_MERGE |
질의 최적화기는 정렬 병합 조인 실행 계획을 만든다. |
ORDERED |
질의 최적화기는 FROM절에 명시된 테이블의 순서대로 조인하는 실행계획을 만든다. FROM 절에서 왼쪽 테이블은 조인의 외부 테이블이 되고, 오른쪽 테이블은 내부 테이블이 된다. |
다음은 심권호 선수가 메달을 획득한 연도와 메달 종류를 구하는 예제이다. 단, athlete 테이블을 외부 테이블로 하고 game 테이블을 내부 테이블로 하는 중첩 루프 조인 실행 계획을 만들어야 한다. 다음과 같은 질의로 표현이 되는데, 질의최적화기는 game 테이블을 외부 테이블로 하고, athlete 테이블을 내부 테이블로 하는 중첩 루프 조인 실행 계획을 만든다.
SELECT /*+ USE_NL ORDERED */ a.name, b.host_year, b.medal
FROM athlete a, game b WHERE a.name = 'Sim Kwon Ho' AND a.code = b.athlete_code;
=== <Result of SELECT Command in Line 1> ===
name host_year medal
=========================================================
'Sim Kwon Ho' 2000 'G'
'Sim Kwon Ho' 1996 'G'
2 rows selected.