DB/SQL

OBJECT - INDEX

제주니어 2022. 9. 9. 19:11

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