INDEX SQL명령문의 처리 속도를 향상시키기 위해서 컬럼에 대해서 생성하는 오라클 객체이다. 내부구조는 이진트리 형식으로 구성되어 있음
INDEX의 장점 검색속도가 빨라지고 시스템에 걸리는 부하를 줄여서 시스템 전체 성능을 향상
INDEX의 단점 인덱스를 위한 추가 저장 공간이 필요하고, 인덱스를 생성하는데 시간이 걸린다. 따라서 데이터의 변경 작업(INSERT/UPDATE/DELETE)이 자주 일어날 경우에는 오히려 성능이 저하

INDEX 표현식

CREATE [UNIQUE] INDEX 인덱스명
ON 테이블명 (
컬럼명
,컬럼명 | 함수명, 함수계산식
);

INDEX 구조

KEY  ROWID
200  AAAE7UAABAAALC5AAA
201 AAAE7UAABAAALC5AAB
202
AAAE7UAABAAALC5AAC
AAAE7UAABAAALC5AAA
AAAE7UA ABA AALC5 AAA
데이터 오브젝트번호 파일 번호 BLOCK 번호 ROW 번호

INDEX 종류
1. 고유 인덱스(UNIQUE INDEX) 중복값이 포함될 수 없음
PRIMARY KEY 제약조건을 생성하면 자동으로 생성됨
2. 비고유 인덱스(NONUNIQUE INDEX) 빈번하게 사용되는 일반 컬럼을 대상으로 생성함
주로 성능 향상을 위한 목적으로 생성
3. 단일 인덱스(SINGLE INDEX) 한 개의 컬럼으로 구성한 인덱스
4. 결합 인덱스(COMPOSITE INDEX) 두 개 이상의 컬럼으로 구성한 인덱스
5. 함수 기반 인덱스(FUNCTION-BASED INDEX) SELECT 절이나 WHERE 절에 산술계산식이나 함수식이 사용된 경우 - 계산식은 인덱스의 적용을 받지 않음

UNIQUE INDEX
생성 CREATE UNIQUE INDEX IDX_EMPNO
           ON EMPLOYEE(EMP_NO);
UNIQUE INDEX는 중복 값이 있는 컬럼에
생성 시 에러가 발생
CREATE UNIQUE INDEX IDX_DEPTCODE
            ON EMPLOYEE(DEPT_CODE);

NONUNIQUE INDEX
NONUNIQUE INDEX는 중복 값이 있는 컬럼에도 생성 가능 CREATE INDEX IDX_DEPTCODE
            ON EMPLOYEE(DEPT_CODE);

COMPOSITE INDEX COMPOSITE INDEX는 두 개 이상의 컬럼을 하나의 인덱스로 생성
COLUMN_POSITION의 순서에 의해 성능이 차이날 수 있음
생성 CREATE INDEX IDX_DEPT
          ON DEPARTMENT(DEPT_ID,DEPT_TITLE);

FUNCTION – BASED INDEX
 TABLE EMP_SAL 생성

CREATE TABLE EMP_SAL
             AS SELECT
                       EMP_ID
                       , EMP_NAME
                       , SALARY
                       , BONUS
                      , (SALARY +(SALARY + NVL(BONUS,0))) * 12 연봉
FROM EMPLOYEE;
INDEX IDX_SALCALC 생성

CREATE INDEX IDX_SALCALC
         ON EMP_SAL ((SALARY + (SALARY * NVL(BONUS,0))) * 12);

FUNCTION – BASED INDEX SELECT
                        *
FROM USER_IND_COLUMNS
WHERE TABLE_NAME = 'EMP_SAL';

INDEX DML작업(특히 DELETE)명령을 수행한 경우, 해당 인덱스 엔트리가 논리적으로만 제거되고 실제 엔트리는 그냥 남아있게 된다.
제거된 인덱스가 필요없는 공간을 차지하고 있기 때문에 인덱스를 재생성 할 필요가 있음
표현식 ALTER INDEX 인덱스명 REBUILD;
SMALL

'SQL' 카테고리의 다른 글

SQL8,9 ORACLE OBJECT(VIEW) , OBJECT(SEQUENCE)  (1) 2023.01.17
SQL7 DML(Data Manipulation Language)  (0) 2023.01.17
SQL6 DDL(Data Definition Language)  (0) 2023.01.17
SQL4,5 JOIN,SUBQUERY  (0) 2023.01.16
SQL3 GROUP BY & HAVING  (0) 2023.01.16

+ Recent posts