DB/ORACLE

8.[오라클]인덱스 정리

혼자좀비 2024. 1. 17. 18:06

index는 테이블에 있는 데이터를 빨리 찾기 위한 용도의 데이터에비스 객체이다.

책을 볼때 특정 내용을 빨리 찾기 위해 찾아보기 부분처럼 사용되는 것을 인덱스라고 생각하면 된다(책갈피 개념이라고 보면 된다.)

대표적인 인덱스를 분류하면 다음과 같다

  1. 인덱스 구성 컬럼 개수에 따른 분류(단일,결합 인덱스)
  2. 유일성 여부에 따른 분류 (unique,non-unique)
  3. 인덱스 내부 구조에 따른 분류(b-tree,비트맵,함수기반등)

해시클러스터 인덱스,리버스 키 인덱스,비트맵조인인덱스,도메인인덱스,파티션인덱스등이 있다.

 

※인덱스 생성 : CREATE UNIQUE INDEX KSW.TEST_INDEX ON KSW.TEST_10 (CREATE_DATE);

(CREATE[UNIQUE] INDEX [스키마명].인덱스명 ON [스키마명].테이블명(칼럼1,칼럼2......))

TEST_INDEX라는 인덱스를 생성

 

명령어로도 INDEX가 생성되었는지 확인할수 있다.

SELECT * FROM USER_INDEXES WHERE TABLE_NAME='TEST_10';

명령어로 INDEX생성 확인

 

만약 하나이상의 칼럼으로 인덱스를 만들게 되면 이를 결합 인덱스라고하다.

CREATE UNIQUE INDEX KSW.TEST_SUM_INDEX ON KSW.TEST_10 (CREATE_DATE,COL2);

칼럼2개를 지정하여 인덱스 생성

 

인덱스는 조회성능을 높이기위해 만들어 졌는데 인덱스 자체에 키와 매핑주소값을 별도로 저장을 한다. 따라서 테이블에 데이터를 수정,삭제등 인덱스에 저장된 정보도 이에따라 이뤄지므로 인덱스를 너무 많이 만들게 되면 SELECT외적으로 INSERT,DELETE,UPDATE시 성능에 부하가 있어 인덱스를 생성할 경우에 고려해야할 사항을 고려한 후 생성한다.

  1. 테이블의 전체 로우 수의 15%이하의 데이터를 조회할때 인덱스를 생성한다.
    (테이블건수,데이터분포에 따라 달라지기도 한다)
  2. 테이블의 로우수가 적다면 굳이 안만들어도 된다.
    테이블이나 인덱스를 탐색하는 것을 스캔(scan)이라 하는데 테이블 건수가 적으면 인덱스를 경유하기 보다 테이블 전체를 스캔하는것이 빠르다.
  3. 데이터의 유일성 정도가 좋거나 범위가 넓은 값을 가진 컬럼을 인덱스로 만드는 것이 좋다.
  4. NULL이 많이 포함된 컬럼은 인덱스 컬럼으로 만들지 않는다.
  5. 결합 인덱스를 만들때는 컬럼 순서가 중요하다.
    (자주 사용되는 칼럼을 앞으로 두는것이 좋다.)
  6. 테이블에 만들수 있는 인덱스는 제한이 없으나, 너무 많이 만들지 않도록 주의한다
    (너무 많이 만들면 성능에 부하가와서 오히려 더 느려질수 있다.)

※인덱스 삭제 : DROP INDEX KSW. TEST_INDEX;

(DROP INDEX [스키마명].[인덱스명])

'DB > ORACLE' 카테고리의 다른 글

10.[오라클 공부]시퀀스 정리  (0) 2024.01.21
9.[오라클]시노님(Synonym) 정리  (0) 2024.01.17
7.[오라클]뷰 정리  (1) 2024.01.17
6.[오라클]테이블 및 칼럼 관련 정리  (0) 2024.01.17
5.[오라클]제약조건  (0) 2024.01.07