INDEX
- INDEX는 오라클에서 제공하는 객체로 SQL 명령문의 처리 속도를 향상시키기 위해서 행들의 위치 정보를 가지고 있다. (내부 구조는 B-트리 형식으로 구성)
- 검색 속도가 빨라지고 시스템에 걸리는 부하를 줄여 시스템 전체 성능을 향상시킨다.
- 인덱스 구조
ROWID는 데이터베이스에 저장되어 있는 데이터의 주소이다.
인덱스는 KEY와 ROWID를 가지고 있는데 KEY는 인덱스를 생성할 때 지정한 컬럼의 값이고 ROWID는 KEY에 해당하는 데이터의 주소 이다.
SELECT ROWID,
EMP_ID,
EMP_NAME
FROM EMPLOYEE;
인덱스 종류
-- 춘 대학교 계정(STUDY)으로 이동
SELECT *
FROM TB_STUDENT
WHERE STUDENT_NAME = '황효종';
--WHERE STUDENT_NO = 'A511332'; -- COST가 이름으로 했을 때보다 빠르다
INDEX 생성
- INDEX는 CREATE 구문을 사용해서 생성한다.
CREATE [UNIQUE] INDEX 인덱스 명
ON 테이블명(컬럼명[, 컬럼명]| 함수명, 함수 계산식);
고유 인덱스(UNIQUE INDEX)
-- 중복되는 값이 있는 컬럼을 지정하면 에러가 발생한다. 즉, EMP_NO는 중복되는 값이면 안된다.
CREATE UNIQUE INDEX IDX_EMPNO
ON EMPLOYEE(EMP_NO);
-- 키 값(STUDENT_NAME)에 이미 중복된 값이 있기 때문에 오류 발생 <duplicate keys found>
CREATE UNIQUE INDEX IDX_STUDENT_NAME
ON TB_STUDENT(STUDENT_NAME);
비고유 인덱스(NONUNIQUE INDEX)
-- 중복 값이 있는 컬럼에도 생성이 가능하다. (WHERE 절에 빈번하게 사용되는 컬럼을 지정)
CREATE INDEX IDX_DEPTCODE
ON EMPLOYEE(DEPT_CODE);
-- 비고유 인덱스 생성
CREATE /*UNIQUE*/ INDEX IDX_STUDENT_NAME
ON TB_STUDENT(STUDENT_NAME);
결합 인덱스 (COMPOSITE INDEX)
-- 중복 값이 있는 컬럼에도 생성이 가능하다. (WHERE 절에 빈번하게 사용되는 컬럼을 지정)
CREATE INDEX IDX_DEPTCODE
ON EMPLOYEE(DEPT_CODE);
-- A617031 C2272800
SELECT *
FROM TB_GRADE
WHERE STUDENT_NO = 'A617031' AND CLASS_NO = 'C2272800';
CREATE INDEX IDX_STUDENT_CLASS_NO
ON TB_GRADE(STUDENT_NO, CLASS_NO);
함수 기반 인덱스(FUNCTION-BASED INDEX)
CREATE INDEX IDX_SALCALC
ON EMP_SAL ((SALARY + SALARY*NVL(BONUS, 0)))*12);
INDEX 재생성
- 빈번한 DML 작업을 수행한 경우 제거된 인덱스가 필요 없는 공간을 차지하고 있지 않도록 인덱스를 재생성한다.
ALTER INDEX 인덱스명 REBUILD;
INDEX 삭제
- INDEX 삭제 시 DROP 구문을 사용해서 삭제한다.
'DB > SQL' 카테고리의 다른 글
OBJECT - PROCEDURE (0) | 2022.09.11 |
---|---|
OBJECT - SYNONYM (0) | 2022.09.10 |
OBJECT - SEQUENCE (0) | 2022.09.08 |
OBJECT - VIEW (1) | 2022.09.07 |
DCL(Data Control Language) (0) | 2022.09.06 |