DataBase

2022-11-30 데이터 베이스 오라클 SQL : INDEX

헤니s 2022. 11. 30. 15:14

4. INDEX
  - 인덱스는 자료의 검색효율을 증대시키기 위한 객체
  - DB의 성능은 데이터 검색에 있고, 이 기능을 지원하는 가장 효율적인 방법이 INDEX를 활용한 방법임
  - 인덱스의 용도(장점)
   . SELECT,INSERT,UPDATE 문의 조건절
   . 데이터의 정렬(ORDER BY), 데이터의 그룹화(GROUP BY)에 사용
   . DBMS의 부담을 줄이고 성능을 개선
  - 인덱스 사용시 단점
   . 비용(인적자원)과 추가공간이 필요
   . 인덱스 유지하는데 비용과 시간이 많이 소요됨(삽입,삭제,변경이 잦다면)


  - 종류
   . Unique index.Non-unique Index
   . Normal / Function-Based / Bitmap

 

(사용형식)
    CREATE [UNIQUE|BITMAPINDEX 인덱스명
      ON 테이블명(컬럼명[,컬럼명,...])[ASC|DESC]

 

 

※ 자바 LIST, SET, ,MAP

LIST 순번이 부여되는 기억공간. INDEX가 부여되어 있다. (데이터 중복 허락)

SET 데이터에 인덱스가 없음. 내용을 봐서 내용이 같은 값을 허락하지 않음

        (Equst와 Hash를 재정의 해서 씀)

SET - treeSet

MAP-treeMap

 

바이너리 서치 트리

트래버스. 검색 운행.

 

-- Unique index : 기본키가 아니다. 중복되지 말아야 한다.(NULL 값 포함) 
--                 NULL값을 가질수 있지만 NULL값을 1개만 가진다.

-- Normal 수식어 없이 쓰는 인덱스. 비트리개념
-- Bitmap : 비트별 매핑되어지는 값을 이용해서 나머지 주소를 저장 -> hasing
-- (물리적 주소값 row id)

-- Function-Based (Normal Index)함수가 적용된 노말 인덱스 이다.

-- 인덱스 : 목차 (목차를 이용하면 빨리 찾을 수 있다.)
-- 인덱스는 검색트리를 이용함..Tree 자식 있는 노드 : 간노드 / 자식 없는 트리 : 단노드 /리프노드

 

(사용형식)
    CREATE [UNIQUE|BITMAP] INDEX 인덱스명 -- [UNIQUE|BITMAP]생략되면 Non-unique 인덱스
      ON 테이블명(컬럼명[,컬럼명,...])[ASC|DESC]

사용예) KOR_LOAN_STATUS테이블에서 201112년 강원도 대출현황을 조회하시오

      SELECT * 
        FROM KOR_LOAN_STATUS
       WHERE PERIOD='201112'
         AND REGION='강원';

      CREATE INDEX IDX_KLST ON KOR_LOAN_STATUS(PERIOD,REGION);

 

      -- PERIOD,REGION를 사용해서 인덱스를 만들겠다.
      -- 인덱스를 만들고 다시 실행하면 더 빨리 검색된다.

     CREATE TABLE TEMP01 AS 
            SELECT *
              FROM KOR_LOAN_STATUS,EMPLOYEES; -- 카타시안 PRODUCT 조인 50932개
      
       SELECT * 
        FROM TEMP01
       WHERE PERIOD='201112'
         AND REGION='강원';
         
     CREATE INDEX IDX_TEMP01 ON TEMP01(PERIOD,REGION); -- TEMP01의 인덱스 생성
     
     CREATE INDEX IDX_KLST ON KOR_LOAN_STATUS(PERIOD,REGION);


      
사용예) 회원테이블에서 회원의 첫 번째 주민번호 앞의 2글자로 인덱스를 구성하시오

   CREATE INDEX IDX_MEM_REGNO0 ON MEMBER (SUBSTR(MEM_REGNO1,1,2));
    
    SELECT MEM_ID,MEM_NAME,MEM_ADD1||' '||MEM_ADD2
      FROM MEMBER
     WHERE SUBSTR(MEM_REGNO1,1,2)='01';

 


-- 인덱스는 자동으로 실행되어진다. => 인덱스 재구성

 

** 인덱스 재구성
    ALTER INDEX 인덱스명 REBUILD
      . 많은 자료의 변동이 발생된 직후 
      . 저장공간이 변경된 경우