-
oracle 인덱스DataBase/oracle 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;
'DataBase > oracle' 카테고리의 다른 글
oracle 테이블스페이스 (0) 2020.04.26 oracle PL/SQL_트리거 (0) 2020.04.26 oracle PL/SQL_패키지 (0) 2020.04.20 oracle PL/SQL_서브프로그램_함수 (0) 2020.04.20 oracle PL/SQL_서브프로그램_프로시저(procedure) (0) 2020.04.19