인덱스란?


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


인덱스 장점 및 왜 사용하는가?


인덱스 사용하면 검색속도 높일수 있음.

검색결과가 늦게 나올 경우 인덱스를 재생성해줘야 함

검색속도가 빨라짐

시스템 부하 줄여 시스템 전체 성능 향상 시킴

색인에서 해당단어(테이블)를 찾아 그 페이지로 이동


인덱스의 단점


인덱스를 생성하는데 시간이 걸림

인덱스를 위한 추가적인 공간이 필요함

데이터 변경 작업(INSERT, UPDATE, DELETE) 자주 일어날 경우 성능저하됨


인덱스의 특징


인덱스는 기본키나 유일키와 같은 제약조건을 지정하면 따로 인덱스를 생성하지 않더라도 자동으로 생성

기본키나 유일키는 데이터 무결성을 확인하기 위해서 수시로 데이터를 검색하기 때문

빠른 조회를 목적으로 오라클에서는 내부적으로 해당컬럼에 인덱스를 자동으로 생성


인덱스를 사용해야 하는 경우


테이블에 행의 수가 많을 때

WHERE문에 해당 컬럼이 많이 사용될 때

JOIN에 자주사용되는 컬럼이나 NULL을 포함하는 컬럼이 많은 경우


인덱스를 사용하지 말아야 하는 경우


테이블에 행의 수가 적을 때

WHERE문에 해당컬럼이 자주 사용되지 않을 때

테이블에 DML작업이 많은 경우


인덱스를 재생성하는 문법


ALTER INDEX EMP REBUILD



인덱스 생성하기 및 제거하기



1. 인덱스 없이 실행하기



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-- EMP08 에는 INDEX 존재하지 않음, EMP로 부터 제약조건이 복사되지 않기 때문에
CREATE TABLE EMP08 
    AS SELECT * FROM EMP; 
 
SELECT TABLE_NAME
     , INDEX_NAME
     , COLUMN_NAME 
  FROM USER_IND_COLUMNS 
 WHERE TABLE_NAME IN('EMP''EMP08'); 
 
INSERT INTO EMP08 SELECT * FROM EMP08; 
INSERT INTO EMP08 (EMPNO, ENAME) VALUES(1111'MJS'); 
 
-- INDEX 없이 SELECT 실행
SELECT DISTINCT EMPNO
     , ENAME 
  FROM EMP08 WHERE ENAME='MJS'
cs



2. 인덱스 만들어 실행하기



1
2
3
4
5
6
7
8
9
10
11
12
13
14
-- EMP08에 INDEX 생성
CREATE INDEX IDX_EMP08_ENAME 
    ON EMP08(ENAME); 
    
SELECT TABLE_NAME
     , INDEX_NAME 
  FROM USER_INDEXES 
 WHERE TABLE_NAME IN('EMP08'); 
 
-- INDEX 유 SELECT 실행
SELECT DISTINCT EMPNO
     , ENAME 
  FROM EMP08 
 WHERE ENAME='MJS'
cs



3. 인덱스 제거하기



1
2
3
4
5
6
7
8
-- DROP INDEX 사용
DROP INDEX IDX_EMP08_ENAME; 
 
 -- 인덱스 제거 확인
SELECT TABLE_NAME
     , INDEX_NAME 
  FROM USER_INDEXES 
 WHERE TABLE_NAME IN('EMP08'); 
cs


+ Recent posts