개발 블로그

INDEX 인덱스 본문

Oracle SQL

INDEX 인덱스

토도 2023. 6. 13. 10:25

1. INDEX

  • INDEX는 오라클에서 제공하는 객체로 SQL 명령문의 처리 속도를 향상시키기 위해서 행들의 위치 정보를 가지고 있다. (내부 구조는 B-트리 형식으로 구성)
  • 검색 속도가 빨라지고 시스템에 걸리는 부하를 줄여 시스템 전체 성능을 향상시킨다.

 

인덱스 구조

-   ROWID는 데이터베이스에 저장되어 있는 데이터의 주소이다

SELECT ROWID, 
       EMP_ID, 
       EMP_NAME
FROM EMPLOYEE;

 

-   인덱스는 KEY와 ROWID를 가지고 있는데 KEY는 인덱스를 생성할 때 지정한 컬럼의 값이고 ROWID는 KEY에 해당하는 데이터의 주소이다.

 

인덱스 종류 

종류 설명 
고유 인덱스(UNIQUE INDEX) 중복되지 않는 데이터를 인덱스의 키값으로 지정하는 인덱스이다.
비고유 인덱스(NONUNIQUE INDEX) 중복되는 데이터를 인덱스의 키값으로 지정하는 인덱스로 빈번하게 사용되는 일반 컬럼을 대상으로 성능 향상을 위한 목적으로 생성한다.
단일 인덱스(SINGLE INDEX) 한 개의 컬럼으로 구성한 인덱스이다.
결합 인덱스 (COMPOSITE INDEX) 두 개 이상의 컬럼으로 하나의 인덱스로 순서에 의해서 성능이 차이가 있을 수 있다.
함수 기반 인덱스(FUNCTION-BASED INDEX) 계산식이나 함수 사용식으로 구성한 인덱스이다.

 


2. INDEX 생성

  • INDEX는 CREATE 구문을 사용해서 생성한다.
CREATE [UNIQUE] INDEX 인덱스 명
ON 테이블명(컬럼명[, 컬럼명]| 함수명, 함수 계산식);

-- 고유 인덱스(UNIQUE INDEX)
-- 중복되는 값이 있는 컬럼을 지정하면 에러가 발생한다.
CREATE UNIQUE INDEX IDX_EMPNO
ON EMPLOYEE(EMP_NO);

-- 비고유 인덱스(NONUNIQUE INDEX)
-- 중복 값이 있는 컬럼에도 생성이 가능하다. (WHERE 절에 빈번하게 사용되는 컬럼을 지정)
CREATE INDEX IDX_DEPTCODE
ON EMPLOYEE(DEPT_CODE);

-- 결합 인덱스 (COMPOSITE INDEX)
-- 두 개 이상의 컬럼을 하나의 인덱스로 생성이 가능하고 순서의 의해 성능의 차이가 날 수 있다.
CREATE INDEX IDX_DEPT
ON DEPARTMENT(DEPT_ID, DEPT_TITLE);

-- 함수 기반 인덱스(FUNCTION-BASED INDEX)
CREATE INDEX IDX_SALCALC
ON EMP_SAL ((SALARY + SALARY*NVL(BONUS, 0)))*12);

3. INDEX 재생성

  • 빈번한 DML 작업을 수행한 경우 제거된 인덱스가 필요 없는 공간을 차지하고 있지 않도록 인덱스를 재생성한다.
ALTER INDEX 인덱스명 REBUILD;

4. INDEX 삭제

  • INDEX 삭제 시 DROP 구문을 사용해서 삭제한다.
DROP INDEX 인덱스명;

'Oracle SQL' 카테고리의 다른 글

오라클 PLAN  (0) 2023.06.16
오라클 SQL 실행 계획  (0) 2023.06.13
오라클의 물리적, 논리적 저장 구조  (0) 2023.06.13
SQL 쿼리 처리 과정  (0) 2023.06.12
PL/SQL 과제 정리  (0) 2023.06.07