B*Tree 인덱스
가장 많이 사용되는 인덱스 형태이며 구조가 자료구조에서 배운 TREE와 비슷해서 B*TREE(Balanced Tree)라고 한다.
B*Tree Search의 기본적인 Algorithm을 이용하는데 주로 온라인 업무의 적은 데이터 처리에 유리하고 분포도가 나쁜 데이터 처리는 성능에 악영향을 줄 수 있으며 하나의 ROW를 검색 시 어느 ROW나 동일한 양의 블록을 ACCESS 하게 된다. (DML문의 잦은 사용으로 좌우 대칭이 안맞을 수 있는데 이때는 index rebuild를 해야 한다)
대체적으로 분포도가 전체 데이터의 3~5% 이상인 경우 인덱스를 통해 SELECT 하면 FULL TABLE SCAN 보다 성능이 떨어질 수 있다. 예를 들어 직책이라는 컬럼이 있는데, A,B,C,D,E라는 값이 들어올 수 있다고 하면 분포도는 20%가 되는데 이런 경우엔 B*TREE 인덱스에서는 성능이 떨어질 수 있다는 겁니다.
데이터베이스에서 IO 단위는 블록, 데이터를 블럭 단위로 전송하는데 인덱스를 사용하지 않을 때는 MULTI BLOCK I/O를 수행하며 한번에 수십개의 BLOCK를 읽게 되는데 이는 인덱스를 검색해 하나씩 블럭을 읽는 것 보다 빠를 수 있다.
만약 10개의 BLOCK를 읽어야 한다면, 인덱스를 사용하면 10번의 I/O를 수행해야 하지만 인덱스를 사용하지 않으면 한번의 I/O로 10개의 BLOCK를 읽을 수 있다는 것인데 읽어야 하는 데이터가 일정 분포도를 넘어서면 인덱스를 사용하지 말아야 하며 데이터 건수가 얼마되지 않은 경우에도
인덱스 사용에 신중해야 한다.
아래의 QUERY를 한번 보자.
SELECT ENAME, SAL, JOB
FROM EMP
WHERE EMPNO = 120;
FROM EMP
WHERE EMPNO = 120;
EMP 테이블에 DEPTNO 컬럼으로 인덱스가 있고 그 인덱스를 통해 데이터를 추출한다고 했을 때...
1. 오라클은 최상단 Root Block을 찾아. 거기엔 다음처럼 값이 있다고 하자. <100, 블럭주소> 즉 EMPNO가 100보다 크면 우측, 작으면 좌측 자식 노드(Branch Block)로 이동하라는 의미 이므로 우측의 브랜치 노드로 이동
2. 브랜치 블럭에는 다음과 같은 값이 있다고 할 때 <150, 블럭주소>... 즉 EMPNO가 150보다 크면 우측, 작으면 좌측 자식 노드(Leaf Block)로 이동하라는 의미 이므로 좌측의 리프 블럭(Leaf Block)로 이동
3. 150보다 작은 120을 조회하므로 좌측의 리프 블럭으로 이동하는데(이곳이 마지막 블럭).
거기엔 (110, ROWID) (120, ROWID)(130, ROWID).... 형태로 데이터가 있고 ROWID를 이용하여 실제 데이터 영역(테이블의 데이터)에서 ENAME, SAL, JOB을 가지고 오게 된다.
오라클자바커뮤니티교육센터, 개발자전문교육, 개인80%환급
www.oraclejavacommunity.com
평일주간(9:30~18:10) 개강
(6/30)[기업100%환급]PL/SQL,ORACLE HINT,TUNING
(6/30)[기업100%환급]안드로이드개발자과정
(7/07)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍
(7/07)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(7/07)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지
(7/07)[채용예정교육]오라클자바개발잘하는신입뽑기프로젝트,교육전취업확정
(7/14)[기업100%환급]SQL기초에서 Schema Object까지
평일야간(19:00~21:50) 개강
(7/01)안드로이드개발자과정
(7/01)닷넷(C#,Network,ADO.NET,ASP.NET)마스터과정
(7/02)Spring3.X, MyBatis, Hibernate실무과정
(7/02)자바웹(JSP,Spring,MyBatis,XPlatform)프로젝트과정
(7/02)JAVA,Network&WEB&Framework(자바기초에서웹스프링까지)
(7/03)웹퍼블리싱 마스터
(7/15)SQL기초에서실무까지
(7/15)MyBatis3.X, Hibernate4.X ORM실무과정
(7/22)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
주말(10:00~17:50) 개강
(6/29)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(7/05)SQL초보에서 Schema Object까지
(7/12)자바웹(JSP,Spring,MyBatis,XPlatform)프로젝트과정
(7/12)MyBatis3.X, Hibernate4.X ORM실무과정
(7/12)개발자를위한PLSQL,SQL튜닝,힌트
(7/13)C#,ASP.NET마스터
(7/19)Spring3.X, MyBatis, Hibernate실무과정
(7/19)웹퍼블리싱 마스터
(7/19)안드로이드개발자과정
주말저녁(18:30~22:20) 개강
(7/19)JAVA,Network&WEB&Framework
(8/09)SQL기초에서실무까지
www.oraclejavacommunity.com
평일주간(9:30~18:10) 개강
(6/30)[기업100%환급]PL/SQL,ORACLE HINT,TUNING
(6/30)[기업100%환급]안드로이드개발자과정
(7/07)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍
(7/07)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(7/07)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지
(7/07)[채용예정교육]오라클자바개발잘하는신입뽑기프로젝트,교육전취업확정
(7/14)[기업100%환급]SQL기초에서 Schema Object까지
평일야간(19:00~21:50) 개강
(7/01)안드로이드개발자과정
(7/01)닷넷(C#,Network,ADO.NET,ASP.NET)마스터과정
(7/02)Spring3.X, MyBatis, Hibernate실무과정
(7/02)자바웹(JSP,Spring,MyBatis,XPlatform)프로젝트과정
(7/02)JAVA,Network&WEB&Framework(자바기초에서웹스프링까지)
(7/03)웹퍼블리싱 마스터
(7/15)SQL기초에서실무까지
(7/15)MyBatis3.X, Hibernate4.X ORM실무과정
(7/22)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
주말(10:00~17:50) 개강
(6/29)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(7/05)SQL초보에서 Schema Object까지
(7/12)자바웹(JSP,Spring,MyBatis,XPlatform)프로젝트과정
(7/12)MyBatis3.X, Hibernate4.X ORM실무과정
(7/12)개발자를위한PLSQL,SQL튜닝,힌트
(7/13)C#,ASP.NET마스터
(7/19)Spring3.X, MyBatis, Hibernate실무과정
(7/19)웹퍼블리싱 마스터
(7/19)안드로이드개발자과정
주말저녁(18:30~22:20) 개강
(7/19)JAVA,Network&WEB&Framework
(8/09)SQL기초에서실무까지
댓글 없음:
댓글 쓰기