DataBase/oracle

oracle 인덱스

HUCHUCHU 2021. 1. 17. 16:24

 

인덱스 : 어떤 데이터가 어디에 있는지 그 주소를 가지고 있는 주소록과 같은 의미의 데이터베이스 객체

 

인덱스 = 데이터 + rowid(주소)

 

인덱스의 생성 원리 :   table full scane -> 정렬 -> 블록에 기록 

** 정렬하는 메모리 공간 : pga  (이후에 모자르면 : temporary tablespace) 

 

[1] unique 인덱스

create unique index  인덱스 명

on 테이블명(컬럼);

[2] non unique 인덱스

create index 인덱스 명

on 테이블명(컬럼);

 

1) empno가 7369인 컬럼의 데이터를 찾는다

2) 이 때 rowid라고하는 위치값을 이용해서 캐시에 저장하고 

3) 캐시에 있는 내용을 가져온다

 

인덱스의 종류

[1] B-tree 인덱스 : 데이터 값의 종류가 많고 데이터가 적을 경우 주로 사용

    1) unique index 

        create unique index idx_dept2_dname on dept2(dname);

    2) non unique index 

      create index inx_emp2_ename on emp2(ename);

    3) FBI : 함수기반 index 

      create index idx_sal_fbi1 on emp(sal+200); 

    4) descending 인덱스 : 내림차수 인덱스를 생성하는것

      create index idx_desc on emp2(hiredate desc);  

    5) 결합인덱스(composit 인덱스) : 인덱스를 생성할 때 두개 이상의 컬럼을 합쳐서 인덱스를 만드는것 

      create index idx_job_deptno on emp2(deptno, job); 

 

[2] Bitmap 인덱스 : 데이터 값의 종류가 많고 데이터가 적을 경우 주로 사용

                         해당 데이터가 있는 자리만 1로 표시 나머지 행은 0으로 표시

create bitmap index 인덱스명 on 테이블명(컬럼명);

 

** 주의사항 : 인덱스를 사용하면 무조건 성능이 좋아지는것은 아니다

// DML을 이용했을경우 취약점

1) insert : index split현상으로 부하가 걸린다. block이 두개로 갈라지는 현상 (정렬 후 다시 중간에 데이터가 들어가야 할 경우)

2) delete : 인덱스에서는 데이터를 사용하지않음으로 표시하고 지우지않는다

3) update : 인덱스에서는 delte를 한 후 새로운 데이터를 insert 작업을 함

 

인덱스 조회하기 위한 딕셔너리

1) user_indexes , user_ind_cloims

2) dba_indexes , dba_ind_colums

 

index rebuild : 인덱스 생성 후 영구적으로 좋은 성능을 가질 수 없기때문에 항상 관리를 해주어야한다.

                    그 방법이 rebuild !!

-- 인덱스의 상태를 조회하기위한 명령어  analyze index 인덱스이름 validate structure;