비트맵 인덱스(Bitmap Index)
구로디지털단지역 오엔제이프로그래밍 실무교육센터
(Java , Oracle, SQL, Oracle Tuning, BackUP& Recovery, ASP.NET,
C#, C#Network ,채용확정 무상교육)
www.onjprogramming.co.kr 오라클자바커뮤니티
B*Tree 인덱스
- B-tree 인덱스는
실제 컬럼 값을 인덱스에도 보관함으로써 중복이 생긴다.
- B-tree 인덱스는
컬럼의 분포도가 좁아야 최적의 성능을 발휘 하므로 분포도가 넓을 경우 불리
- b-tree 인덱스는 'null', 'not'을 사용한 부정형 조건 복잡한 'or'등에서 제 성능을 발휘하지 못함
· 대량
데이터 환경, 복합인덱스의 경우 Index위한 데이터
중복저장으로 저장공간의 낭비
Bitmap 인덱스
· DB Index를 Bit 단위로 저장하여 B-Tree 인덱스 한계를 극복하여 대량의
자료 조회에 적합한 Index 유형
· DW와
같은 정보계 시스템에서 다량의 데이터를 조회하는 경우, 데이터의 존재 여부를 0,1로 표현하여 다량의 데이터를 빠르게 조회
· 컴퓨터에서
사용하는 최소단위인 비트를 이용, 컬럼 값을 저장하고 이를 이용
ROWID를 자동으로 생성하는 방법
· 분포도가
나쁜 컬럼 값에 대한 Index Access가 빠름, OR
질의에 용이함
· 빈번하게 Update되는 환경에는 Leaf Block 갱신으로 인해
부적합하다. 하나의 인덱스 엔트리를 수정하게 되면 그인덱스가 가리키는 모든 ROW에 락을 건다.
·
:namespace prefix = v ns = "urn:schemas-microsoft-com:vml"
/>:NAMESPACE PREFIX = V />
|
|
B-tree 인덱스의 리프블럭(leaf block)은 Index key value + rowid 로
구성이
되어
있지만, Bitmap Index는 Index key value + Start Rowid + End Rowid + Bitmap 엔트리로
구성되어
있다. 1개의 index값이
테이블상의
여러
개의 record를
표현하기
때문에 DML문을
사용할
경우 row level locking을
지원할
수
없다
Start rowid 와 End rowid 의 사이에 있는 모든 row수만큼 Bitmap이 표현되어야 하지만, 오라클에서는 내부적인 압축 알고리즘을 사용하여 Bitmap을 생성하기 때문에 모두 표현되지 않는 경우도 있다 |
[구조]
bitmap인덱스의 leaf block 구조는 key, start rowid, end rowed,
bitmap으로 구성되어 있다. (비트리 인덱스의 경우
key, rowid로 구성) 비트맵 인덱스의 경우 하나의 인덱스 엔트리에 여러
개의 rowid가 있어 인덱스키와 rowid가 쌍으로
이루어진 B*Tree 인덱스와는 다르다.
[비트맵
인덱스 생성 절차]
인덱스를
생성하고자 하는 컬럼의 값들을 찾기 위해 테이블 스캔을 한 후
bitmap generator에 의해 컬럼값, start rowid, end rowid , bitmap을 갖는 인덱스 엔트리를 생성한다.생성된 Bitmap들을 B-tree구조에 넣기 쉽도록 key값과 start rowid 순으로 정렬하며 마지막 단계에서는 정렬된 인덱스 엔트리들을 단순히 B-tree구조로 삽입한다.
bitmap generator에 의해 컬럼값, start rowid, end rowid , bitmap을 갖는 인덱스 엔트리를 생성한다.생성된 Bitmap들을 B-tree구조에 넣기 쉽도록 key값과 start rowid 순으로 정렬하며 마지막 단계에서는 정렬된 인덱스 엔트리들을 단순히 B-tree구조로 삽입한다.
[실습]
SQL> create bitmap index idx_emp_job on
emp(job);
인덱스가
생성되었습니다.
SQL> set autotrace on
SQL> select count(*) from emp
2 where job =
'SALESMAN';
COUNT(*)
----------
4
Execution Plan
| Id | Operation | Name | Rows
| Bytes | Cost (%CPU
------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 |
8 | 1 (0
| 1 | SORT AGGREGATE | | 1 |
8 |
| 2 | BITMAP CONVERSION COUNT | | 3 |
24 | 1 (0
|* 3 | BITMAP INDEX FAST FULL SCAN| IDX_EMP_JOB
| | |
실행
계획을 보면 실제 데이터 테이블에는 접근하지 않았다.
아래의
예를 보자.
SQL> select empno, ename
2 from
emp
3 where job =
'SALESMAN'
4 /
EMPNO
ENAME
---------- ----------
7499
ALLEN
7521
WARD
7654
MARTIN
7844
TURNER
Execution Plan
----------------------------------------------------------
Plan hash value: 3956160932
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT |
| 3 | 54 |
2 (0)| 00:00:01
|
|* 1 | TABLE ACCESS FULL| EMP |
3 | 54 | 2
(0)| 00:00:01 |
--------------------------------------------------------------------------
이번에는
힌트 구문을 이용해 보자.(비트맵 인덱스를 사용하기 위해)
비트맵
인덱스를 이용하여 rowid를 찾았음을 알 수있다.
SQL> select
2 empno, ename
3 from emp
4 where job =
'SALESMAN'
5 /
EMPNO
ENAME
---------- ----------
7499
ALLEN
7521
WARD
7654
MARTIN
7844
TURNER
Execution Plan
| Id | Operation | Name | Rows
| Bytes | Cost (%CPU)
--------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 3 |
54 | 2 (0)
| 1 | TABLE ACCESS BY INDEX ROWID | EMP |
3 | 54 | 2
(0)
| 2 | BITMAP CONVERSION TO ROWIDS| | |
|
|* 3 | BITMAP INDEX SINGLE VALUE | IDX_EMP_JOB
| | |
오라클자바커뮤니티 추천강좌-JAVA&WEB프레임워크실무과정
(8/31온라인 지원가능!! 홈페이지에서 지원신청 바랍니다.)
| 강좌명 | JAVA&WEB프레임워크실무과정(주말주간(토/일)) |
|---|---|
| 교재 | 자체교재 무료제공 |
| 강좌 일정 | 09월01일(일) ~ 10월26일(토)((주말주간(토/일)) 10:00~18:00, 14일) 총 98시간 |
| 강의 장소 | [B강의장]구로디지털단지역2번 출구-> 미니스톱끼고 우회전 -> 100m 직진
후 골목길 끝에서 이마트방향 우회전 -> 50m 직진 후 우체국 옆골목으로 길건너서 직진 -> 150미터 직진 후 JnK 타워에서
우회전 -> 50미터 직진 후 우측에 코오롱빌란트2차 803호 (구로구 구로3동 222-8 코오롱디지털타워 빌란트2차 803호)
[약도보기] |
| 수강절차 | - 강좌내용 확인 - 전화 또는 홈페이지(www.onjprogramming.co.kr)를 통한 수강지원 및 수강료 결제(무통장입금, 온라인 카드결제) - 고용보험 가입자(재직자)인 경우 고용보험환급 관련 서류 제출 - 수강전 : 커리큘럼 및 장소에 대해 다시 한번 공지 - 교육 전 설문 작성(간단한 개발 경력, 수강 목적, 강좌진행방식 등) - 강좌 수강 - 수강후 : 교육 후 설문 작성 |
| 수강료 | - 1,200,000원 [고용주환급]대기업:40만원 전후,중소기업:48만원 전후 환급 [개인수강지원(개인환급)]정규직960,000원 ,비정규직:전액환급 대기업(상시근로자 300인 이상 대기업)은 개인환급 불가합니다. 재직자 내일배움카드 : 정부지원금 80% 자기부담금 20% (구 능력개발카드 명칭이 내일배움카드로 변경 / 연간 총한도 200만원 * 휴강 :법정공휴일 / 추석 연휴 9월17일 휴강 |
| 수강료 입금안내 |
- 온/오프라인 카드결제, 계좌이체(수강안내->입금안내 참조) |
| 문의사항 | 02-851-4790 번으로 연락 부탁 드립니다. |
| 교육개요 | 본과정은 프로그래밍 언어의 경험이 있는 분이지만 자바를 처음하시는 분들을 위해 현장에서 필요로 하는 기술들을 최적화된 커리큘럼 및 강사를 통해 배울 수 있도록 하는 과정 입니다. 자바의 기본적인 사항부터 JDBC 프로그래밍, 모든 개발의 근간이 되는 자바네트워크 프로그래밍(이거 안하시면 2~3년지나서 UI개발자의 틀을 벗어 날 수 없습니다), 자바웹의 기본이되는 JSP, 그리고 최근 가장널리 사용되는 Ajax, jQuery를 통해 화면 깜박임없이 웹페이지를 역동적으로 구성할 수 있도록 배우고 최근 가장 많이 사용되는 JAVA기반의 프레임워크인 Spring Framework, SQL Data Mapper인 MyBatis까지 배울 수 있는 과정으로 자바 웹 개발자로 가시고자 하는 분들을 위한 최적의 과정 입니다. 본과정을 통해 기초부터 하나씩 배우신다면 내공 있는 자바 개발자가 되실것을 확신합니다! |
| 교육목표 | - 자바 기본문법의 이해 - 자바 네트워크 프로그래밍에 대한 이해 - JDBC 개발에 대한 이해 - 자바 웹개발에 대한 이해 - JSP의 작동원리 및 기본문법의 이해 - Ajax 및 jQuery에 대한 이해 - WAS(Web Application Server) 및 Web Server에 대한 이해 - 자바기반 프레임워크에 대한 이해(Spring3.X) - SQL Mapper(MyBatis)에 대한 이해 - 실무 자바기술의 전반적인 이해 및 활용 |
| 교육대상 | - 자바 초보 개발자 - 신입개발자 - 다른 언어를 사용하다가 자바쪽으로 전향을 원하는 개발자 - 자바를 배우고자 하는 학생 |
| 선수학습 | - 프로그래밍에 대한 이해 |
| Java Fundamental | 자바 언어 소개,기본 문법 Virtual Machine 소개/메모리 영역 클래스 패스(Class Path) 개요 Array 이론/실습 클래스와 객체(Class & Object) Abstarct Data Type, 상속(Inheritance)과 다형성 추상클래스(Abstract Class)와 다형성 인터페이스(Interface)와 다형성 연관(Aggregation & Composition) 오버로딩(OverLoading)과 오버라이딩(Overriding) this/super/constructor Package 만들기 이론/실습 Java에서 예외 처리 요령 사용자 예외 처리 방법 스트림(Stream) 입출력 관련 클래스, InputStream/OutputStream, FileInputStream/FileOutputStream Reader/Writer등 입출력 관련 클래스 표준 입출력/FILE 처리, 객체 직렬화 이론/실습 Thread 개요 Java에서의 Process Thread Joining/Interrupt |
|---|---|
| Java Network | URL/HTTP URL, URLConnection, HttpURLConnection, URLEncoding, URLDecoding 클래스
개요 URL을 다루는 예제 실습(Get/Post) Client Socket과 Server Socket의 개요 MultiThread EchoServer Socket을 이용한 예제 구현 UDP Programming(Multicasting programming) UDP/Datagram 개요 DatagramSocket, DatagramPacket 소개 UDP를 이용한 예제 구현 Multicast 소개 Multicast Client/Server 구현 Distributed Computing(java RMI) Distributed Computing, Object 소개 Java RMI를 이용한 “Hello World” 제작 RMI 응용예제 실습 |
| JDBC Programming | JDBC Driver 소개 JDBC 연결방법 Connection, Statement, ResultSet, PreparedStatement Oracle의 function, procedure 다루기 DBCP, DataSource, Connection Pool |
| JSP(Java Server Page) | JSP 기본문법, 작동원리 JSP 내장 객체,Java Beans JSP에서의 Session, Cookie 다루기 Custom Tag MVC Model(Model2)의 이해 및 활용 |
| Ajax/jQuery | Ajax 개발환경 구축 왜 Ajax 인가? Ajax의 기본 구성 XMLHttpRequest 객체 innerHTML의 사용 DOM(Document Object Model) 다루기 Ajax MVC jQuery 소개, 개요 jQuery 응용 예제 |
| Spring Framework3.2 | J2EE Framework에 대한 흐름과 Spring Framework에 대한 이해 개발 환경 설정(Eclipse4.2, Tomcat7, Spring3.2 다운로드 및 설치) Spring IoC DL(Dependency LookUp) &DI(Dependency Injection) DL. DI 예제를 통한 이해 Spring 설정 상세 Spring AOP 란 ?Code, Advice, JoinPoint, PointCut, Aspect, WeavingProxyFactoryBean Annotation기반 AOP(AspectJ) Spring JDBC Spring Web MVC Sprint Web Flow Spring Controller Spring MVC TEST Framework Spring3.2 New Feature |
| MyBatis/Hibernate | [MyBatis] 개요 및 소개 개발환경 설정 및 설치 Data Mapper란 sqlMapConfig 이해 및 환경설정 Spring, MyBatis 연동 SQL Map XML File 이해 SqlMapClient 이해 SQL의 실행(Insert/update/delete) 이해와 실습 고급 쿼리 사용방법의 이해와 실습 Spring MyBatis 응용예제 작성 [Hibernate] Hibernate 소개 SessionFactory 설정 1:1, 1:다 매핑 Session Interface Hibernate DML Spring, Hibernate 예제 프로그램 작성 |
| Mini Project | Spring 게시판 작성 실습 -- 게시판 구현에 대해 철저하게 이해한다면 실무에서의 개발도 충분히 가능 합니다. |
댓글 없음:
댓글 쓰기