--문법
CREATE [UNIQUE] INDEX 인덱스명
ON 테이블( 컬럼 [, 컬럼]);
CREATE INDEX emp_ename_idx
ON emp(ename);
생성된 인덱스 확인하는 방법
SELECT index_name, table_name FROM user_indexes WHERE table_name IN ('EMP', 'DEPT'); --EMP와 DEPT의 인덱스를 확인할 수 있다.
어떤 컬럼에 인덱스가 지정되었는지 확인하는 방법
SELECT index_name, table_name, column_name FROM user_ind_columns WHERE table_name IN ('EMP', 'DEPT');
인덱스 적용 시점
인덱스를 사용해야 하는 경우 | 인덱스를 사용하지 말아야 하는 경우 |
---|---|
1. 테이블에 데이터가 많을 때 2.컬럼 값의 범위가 넓은 컬럼인 경우 3.WHERE절 또는 JOIN문에 사용되는 컬럼 4.검색 결과가 전체 데이터의 2~4% 이내를 검색하는 경우 5.NULL을 포함하는 컬럼이 많은 경우 | 1.테이블에 데이터가 적을 때 2.WHERE 문에 해당 컬럼이 자주 사용되지 않을 때 3.검색 결과가 전체 데이터의 10~15%이상을 검색하는 경우 4.테이블에 DML작업이 많은 경우 5.인덱스가 적용된 컬럼이 함수 및 NOT 연산자와 같이 사용되는 경우 |
-- 인덱스가 적용되지 않은 Table Full Scan방식으로 사원 정보가 검색된다.
SELECT *
FROM emp
WHERE TO_NUMBER(empno) = 7369;
-- 7369가 아닌 행들은 많으므로 인덱스가 적용되지 않고 Table Full Scan 방식으로 사원 정보를 검색한다.
SELECT *
FROM emp
WHERE empno != 7369;
DROP INDEX 인덱스명;