코딩하는 문과생

[SQL] Oracle, Oracle 튜닝, 인덱스 본문

프로그래밍/SQL

[SQL] Oracle, Oracle 튜닝, 인덱스

코딩하는 문과생 2020. 4. 12. 21:19

인덱스 이해하기

 

메모리와 데이터베이스

 

[예시]

select * from emp where empno = 201642

1. Index가 없는 경우

- 201642 정보가 디스크 어떤 블럭에 있는지 모르므로,

10만개 전부 디스크에서 DB Buffer 캐시로 복사한 뒤 Full Scan으로 찾아야 한다. 

 

2. Index가 있는 경우

- where절의 조건으로 준 컬럼이 Index의 Key로 생성되어 있는지 확인한 뒤,

인덱스에 먼저 가서 201642정보가 어떤 ROWID를 가지고 있는지 확인한 뒤 해당 ROWID에 있는 블럭만 찾아가서 db Buffer 캐시에 복사하게 된다.

- 메모리에 위치한 Index 파일을 먼저 찾아 필요한 부분만 디스크에 Access한다.
-> 디스크 I/O가 줄어든다.


인덱스의 종류

1. B-tree 인덱스

: OLTP(Online Transaction Processing: 실시간 트랜잭션 처리)

실시간으로 데이터의 입력과 수정이 일어나는 환경에 많이 사용

 

2. Bitmap 인덱스

: OLAP(Online Analytical Procession: 온라인 분석 처리)

대량의 데이터를 한꺼번에 입력해 분석이나 통계정보 출력 시 많이 사용

데이터 값의 종류가 적고 동일한 데이터가 많은 경우 사용(ex. 지역 : 서울, 부산, 대구, 대전 등)


인덱스 사용여부 판단

인덱스 사용해야 하는 경우인덱스 사용하지 말아야 하는 경우
테이블에 행의 수가 많을 때테이블에 행의 수가 적을 때
WHERE문에 해당 컬럼이 많이 사용될 때WHERE문에 해당 컬럼이 자주 사용되지 않을 때
검색 결과가 전체 데이터의 2% ~ 4% 정도 일 때검색 결과가 전체 데이터의 10% ~ 15% 이상일 때
JOIN에 자주 사용되는 컬럼이나 NULL을 포함하는 컬럼이 많은 경우테이블에 DML작업이 많은 경우 즉, 입력 수정 삭제 등이 자주 일어날 때