인덱스란?
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 |
'전체 > Oracle' 카테고리의 다른 글
ORACLE ESCAPE, NVL, NVL2, ORDER BY, DISTINCT 정리 (0) | 2017.06.12 |
---|---|
ORACLE 산술, 비교, 논리, 기타 연산자 정리 AND,OR,NOT,BETWEEN,IN,LIKE (0) | 2017.06.12 |
ORACLE VIEW (0) | 2017.06.12 |
ORACLE PIVOT 사용 달력 만들기, 분석함수 사용 달력 만들기 (0) | 2017.06.11 |
ORACLE PIVOT과 UNPIVOT 정리 (2) | 2017.06.09 |