DB

SQL 인덱스

짱코딩러 2022. 8. 8. 21:48

인덱스 : SQL 명령문의 처리 속도를 향상시키기 위해서 컬럼에 대해서 생성하는 오라클 객체

인덱스를 사용해야 하는 경우 인덱스를 사용하지 말아야 하는 경우
테이블에 행의 수가 많을 때 테이블에 행의 수가 적을 때
WHERE 문에 해당 컬럼이 많이 사용될 때 WHERE 문에 해당 컬럼이 자주 사용되지 않을 때
 검색 결과가 전체 데이터의 2%~4% 정도 일 때 검색 결과가 전체 데이터의 10%~15% 이상 일 때
JOIN에 자주 사용되는 컬럼이나
 NULL을 포함하는 컬럼이 많은 경우
테이블에 DML 작업이 많은 경우
 즉, 입력 수정 삭제 등이 자주 일어 날 때

 

인덱스 딕셔너리

SELECT* FROM USER_IND_COLUMNS;
인덱스의 생성 유무 확인
SELECT INDEX_NAME, TABLE_NAME , COLUMN_NAME
FROM USER_IND_COLUMNS
WHERE TABLE_NAME IN('EMP', 'DEPT');

 

인덱스 생성

CREATE INDEX 인덱스명
ON 테이블명 (칼럼명);   --어떤 테이블의 칼럼에 설정해 줄 것인지 적어줌
CREATE INDEX IDX_EMP01_ENAME
ON EMP01(ENAME);

 

인덱스로 검색

사원 이름이 ‘SYJ'인 행을 검색
SELECT DISTINCT EMPNO, ENAME 
FROM EMP01 
WHERE ENAME='SYJ';

 

인덱스 제거

DROP INDEX index_name;

 

인덱스 재생성

DML 작업 특히 DELETE 명령을 수행한 경우에는 해당 인덱스 엔트리가 논리적으로만 제거 되고 실제 인덱스 엔트리는 그냥 남아 있게 된다.

이러한 인덱스들이 필요없는 공간을 차지하고 있기 때문에 종종 인덱스를 재생성 시켜주어야 한다.

ALTER INDEX index_name REBUILD;
ALTER INDEX IDX_EMP01_DEPTNO REBUILD;

 

인덱스 종류

1.고유 인덱스 : 유일한 값을 갖는 컬럼에 생성

CREATE UNIQUE INDEX index_name
ON table_name (column_name);

2.비고유 인덱스 : 중복된 값을 갖는 컬럼에 생성(기본 인덱스)

3.단일 인덱스 : 한 개의 컬럼으로 구성한 인덱스(기본 인덱스)

4.결합 인덱스 : 두 개 이상의 컬럼으로 인덱스를 구성

CREATE INDEX IDX_DEPT01_COM
ON DEPT01(DEPTNO, DNAME);

5.함수기반 인덱스 : SQL 문장의 WHERE 절에 SQL함수(산술 표현 또는 함수)가 사용되는 경우 인덱스 컬럼에 변형이 생겨 인덱스를 사용하지 못하게 되는데, 이를 해결하고자 함수 결과 자체를 통으로 인덱스를 만든 것

CREATE INDEX IDX_EMP01_ANNSAL
ON EMP01(SAL*12);