TECH
QUESTION
자주하는 질문답변 입니다.
Oracle
작성자 | 유건데이타 | 등록일 | 2015-05-08 |
제목 | INDEX 컬럼의 결정 방법과 HINT 사용 | ||
---|---|---|---|
INDEX 컬럼의 결정 방법과 HINT 사용
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 인덱스로 만들 컬럼은 다음과 같은 기준에서 선택한다. 1. WHERE 절에서 function의 input이 아니면서, 빈번히 사용되는 컬럼들. 2. 선별력이 높은 컬럼들 (테이블에서 10% 미만인 데이터) 3. 크기가 적은 테이블에서는 인덱스를 만들지 않는다. DB에서 retrieve되는 속도가 느릴 경우, 먼저 Execution Plan을 만들어 보면 어떤 인덱스를 사용하는지 알 수 있다. 만약, User가 기대한 생성한 인덱스를 사용하지 않을 경우, 다음에서 설명하고 있는 Hint 절을 추가하여 retrieval 속도를 향상시킬 수 있다. Optimizer Hint Syntax -----> SELECT -----> /*+ hint 절*/ -------> DELETE UPDATE 또는 -----> SELECT -----> + hint 절 -----> DELETE UPDATE Hint 절에는 다음 조건들을 부여할 수 있다. 1. FULL(table_name) : table을 full scan하길 원할 때 사용함. 2. INDEX(table_name index_name[index]) : 특정 index를 사용하도록 할 때 사용함. 3. INDEX_ASC(table_name index_name[index]) 4. INDEX_DESC(table_name index_name[index]) 5. AND_EQUALS(table_name index_name index_name[index]) 6. ROWID(table_name) 7. CLUSTER(table_name) 8. HASH(table_name) 9. ORDERED 10. USE_MERGE(table_name) 11. USE_NL(table_name) Hint를 사용하여 특정 index를 사용한 update의 예 (이 결과는 7.3 이상에서 제공되는 auto trace를 사용하는 방법이나 execution plan 또는 tkprof를 이용하여 확인할 수 있다.) Update /*+ INDEX (e1 e_job) */ Emp e1 SET sal = (SELECT --+ INDEX (e1 e_dept) (e1.sal + AVG(e2.sal))/2 FROM emp e2 WHERE e2.deptno = e1.deptno) WHERE job = 'CLERK' AND deptno BETWEEN 10 AND 40; 출처 : Technical Bulletin (Korean) |
Comment | |||
---|---|---|---|
등록된 코멘트가 없습니다. |