본문 바로가기

데이터베이스/오라클

BitMap Index 사용 이유.

일반적인 B*tree 구조의 Index와 달리 bitMap Index는 NULL값도 검색이 가능하다.

NULL값에 대해서도 기록한다. 이에 대해서 2가지 장점을 가진다.

 

1. 보통의 Index는 NULL값도 포함하지만 조건절에서 IS NOT NULL을 통해 검색을 할 경우 INDEX FULL SCAN을 유발한다.

BIT맵의 경우 NULL에 대한 값을 기록하므로 INDEX RANGE SCAN이 가능하다.

2. 시작 rowid와 종료 rowid만을 기록하고 중간값을 BITMAP Index의 offset을 활용하므로 일반적인 B*tree Index에 비해서 검색이 조금 더 빠르다.

 

하지만 결국 BITMAP INDEX도 DISK를 경유한 TABLE에 대한 SCAN발생시 I/O를 유발하므로 보통 INDEX와 크게 차이를 발생시키지 않는다.

 

결국 튜닝의 핵심은 언제나 3가지라고 생각한다.

1. Database call의 최소화 -> Cache에 대한 Latch 획득부터 하드파싱, 소프트파싱을 통한 부하, Server Process가 Busy한 상태라면 그에 따른 Wait를 유발한다.

2. 적절한 Index 생성 및 조인방법 : OLTP환경하에서는 Index 생성을 통한 각 Row별 처리를 통한 부분범위처리 기법, 대용량 배치성 테이블에는 Sort Merge Join과 Hash Join을 통한 처리등 내부 구조가 어떻고 어떻게 실행되는 이해를 통한 쿼리 작성.

3. 데이터 가공 사용 지양 및 Function 함수의 적절한 사용 : 데이터 가공의 문제점은 1. 인덱스를 사용하지 못한다는 것이다. OLTP환경하에서는 인덱스는 핵심이므로 이는 시스템에 대한 성능 저하 및 빈번하게 발생하는 시스템의 쿼리가 이렇다면 전체 시스템의 환경저하를 유발한다.

Funcion 함수는 이식성을 고려하여 PL/SQL엔진하에서 실행되도록 설계되었다. 그러므로 Select절 내에 포함될 경우 각 Row별로 실행되므로 CPU 사용 및 메모리 사용의 극대화를 유발한다. 그러므로 Fectch 데이터 건수가 많은 Query에는 포함시키지 말아야 한다.

 

결국 핵심은 잘알아야 하고 잘 이해해야 하고 잘 써야 한다는 것이다.

'데이터베이스 > 오라클' 카테고리의 다른 글

DB Block, Extends, Segment  (0) 2022.03.08
Buffer Cache Hit Ratio  (0) 2022.03.08
인덱스 Skew 및 Fragment  (0) 2022.03.08
7. 집계 함수  (0) 2022.01.25
6. 데이터형  (0) 2022.01.24