본문 바로가기
OraclE

REVERSE KEY INDEX

by 타마마임팩트_쫀 2008. 8. 12.
제품 : ORACLE SERVER

작성날짜 : 2002-04-26

ORACLE8 : REVERSE KEY INDEX
============================

PURPOSE
--------

Oracle8에서는 Reverse Key Index라는 새로운 종류의 index를
생성하여 사용할 수 있다.
Reverse Key Index는, index 구성 column의 순서는 그대로
유지하면서, 각 column의 data(ROWID는 제외)를 byte 단위로
역순으로 indexing한다.



Explanation
------------

1. 유용성
1). 이러한 배열은 OPS(Oracle Parallel Server) 환경에서, 적은
수의 leaf block에 변경 작업이 집중되는 경우에 발생할 수 있는
Performance 저하를 회피할 수 있도록 한다.
예를 들어 같은 indexed table에 서로 다른 instance에서 동시에
insert 작업을 한다고 가정한다. 7.2에서 추가된 기능인 Free
Lists Group처럼 Reverse Key Index도 비슷한 유형의 이점을
제공한다.
Index의 Key를 역순으로 저장하므로써 insert 작업은 많은 수의
leaf block으로 분산될 수 있다.

예를 들어, 101, 102, 103이라는 index key를 갖는 자료를
regular index를 사용하는 table에 insert한다고 가정해 보자.
서로 다른 instance에 접속하여 작업하는 user들이 같은 index
block에 insert 작업을 하게 되면 ping이 발생한다.
(다른 instance에 의해서 읽히기 위하여 특정 instance에 의해
block이 disk에 쓰여져야 할 때, 이를 ping이라고 함)
과도한 ping은 performance에 악영향을 미칠 수 있으므로 이를
줄여야 한다.
위의 예에서 Reverse index key를 사용한다면 key는 101, 201,
301이 되며, index segment의 서로 다른 부분에 write된다.
따라서 이러한 index를 사용한다면 OPS에서 ping을 줄일 수
있게 되고, performance의 향상을 가져올 수 있다.
(reverse되는 것은 digit이 아닌 byte이므로 여기에서 든 예는
정확하다고 할 수는 없다.)

2). Reverse key index는 또한, ascending한 자료 축적이 일어나고
낮은 value들이 삭제되어지는 table의 경우 유용하다.
이러한 경우 regular index는 기울어질(skewed) 수 있으나,
reverse key index는 그렇지 않을 것이다.


2. 제한사항

Reverse key index를 사용할 경우 index range scan은 사용할 수
없으며, Equality condition이나 full-index scan(index rebuild
작업시)만이 가능하다. 이는, 실제 data로써는 인접한 것들이
reverse key index 상에서는 서로 인접되어 저장되지 않기 때문이다.

3. Reverse Key Index를 생성하는 방법

REVERSE keyword를 이용하여 생성
CREATE INDEX index_name ON table_name (a, b, c) REVERSE ;

REVERSE, NOREVERSEE keyword를 이용하여 index를 rebuild
ALTER INDEX index_name REBUILD REVERSE ;
ALTER INDEX index_name REBUILD NOREVERSE ;

reverse key index를 NOREVERSE keyword 없이 rebuild할 경우
reverse key index로 재생성된다.


Reference Documents
--------------------

'OraclE' 카테고리의 다른 글

ASSM에서 Freelist 관리  (0) 2008.09.25
DBA Table / View 정리  (0) 2008.09.17
오라클에서 시퀀스(SEQUENCE) 사용하기  (0) 2008.09.17
Windows 32bit OS 에서 Oracle Memory Sizing  (0) 2008.08.13
BITMAPPED INDEX  (0) 2008.08.12