[Oracle SQL] INDEX

고동이의 IT·2021년 10월 14일
0

Oracle SQL

목록 보기
26/31

># INDEX 객체

  • 검색의 효율성을 증대시키기 위한 객체
  • 데이터베이스 서버의 성능을 결정하는 요소 중 하나
  • 데이터 검색, 삽입, 변경 시 해당 자료의 선택(WHERE 조건)의 효율성을 위해 사용
  • 정렬, 그룹화 등에도 사용
  • 별도의 저장공간 및 처리 프로세스 필요
  • 데이터의 삽입, 삭제가 빈번한 경우 인덱스 파일 재구성에 많은 자원 소요됨

- 인덱스 객체의 종류
1) UNIQUE / NON-UNIQUE INDEX

  • 중복 값의 허용 여부에 따른 분류
  • UNIQUE 인덱스에서도 NULL 값은 허용되나 1번만 허용(단 기본키 인덱스는 제외)
  • NON-UNIQUE INDEX에서는 중복 값 허용

2) SINGLE/COMPOSITE INDEX

  • 인덱스 구성 칼럼의 수에 의한 분류
  • 복합 인덱스인 경우 인덱스 구성 컬럼의 수와 컬럼의 순서가 매우 중요

3) Normal Index

  • 기본 인덱스
  • 트리(이진 Tree) 구조 사용 - 모든노드에 평균검색 시간 할당
  • 컬럼 값과 rowid 를 기반으로 계산된 주소 할당

    4) Bitmap Index
  • 컬럼 값과 rowid 를 이진수 조합으로 변환된 값을 주소로 사용
  • 추가, 삽입, 삭제가 빈번한 경우 비효율적

5) Function-Based Normal Index

  • 함수가 적용된 컬럼을 대상으로 인덱스 구성
  • where 절 사용시 인덱스 구성에 사용된 함수의 구성과 같은 조건문사용이 가장 효율적 (사용형식)
    CREATE [UNIQUE | BITMAP} INDEX 인덱스명
    ON 테이블명(컬럼명[,컬럼명,...][ASC|DECS])
    - 기본은 NON-UNIQUE INDEX임

    사용예)
    CREATE INDEX IDX_PROD ON PROD(PROD_NAME);
      SELECT *
        FROM PROD
       WHERE PROD_NAME = '삼성 캠코더';
       
       **인덱스 삭제
       DROP INDEX 인덱스명;
       DROP INDEX INX_PROD;
       

사용예) 장바구니 테이블에서 월/일/순번으로 데이터 검색이 자주 발생됨
이 검색의 효율성을 높이기 위한 인덱스 구성

   CREATE INDEX IDX_CART
    ON CART(SUBSTR(CART_NO,5));
    
    SELECT * 
      FROM CART
     WHERE SUBSTR(CART_NO,5)='050300002';
     
     DROP INDEX IDX_CART


2) 인덱스의 재구성

  • 데이터베이스 테이블이 다른 저장공간으로 이동된 경우

  • 원본테이블에 자료의 입출력이 빈번히 발생된 직후 => 인덱스의 재구성이 필요

    (사용형식)
    ALTER INDEX 인덱스명 REBUILD;

profile
삐약..뺙뺙

0개의 댓글