2017-11-06 23 views
1

기본 키 열에 역 색인을 사용하여 테이블을 만들려고합니다.Oracle 역방향 기본 키

테이블이 만들어지고 많은 데이터가 삽입되어 시퀀스의 키 값이 생성됩니다.

역방향 키에 대해 이해 한 내용에서 nextval을 얻은 다음 역순으로 삽입하는 방법에 대해 ... 내 select 문에서 키 값이 반대로 표시 될 것으로 예상했습니다.

NEXTVAL (112), 내가 테이블에서 선택하면 내가 211을보고 기대했다하지만 난 아직도 여전히 리버스 키 인덱스를 구현하고, 오라클은 단지에 표시된다 (112)

볼 수 있었다면 비 반전을 체재?

아니면 실제로 잘못된 것입니까?

나 인덱스에 사용되는 SQL은

CREATE UNIQUE INDEX "<schema>"."<index_name>" ON "<schema>"."<table_name>" ("SYS_I") REVERSE;

답변

5

역방향 키 인덱스가 키 값을 변경하지 않는 것이다.
디스크에 저장된 물리적 표현 만 변경됩니다. the documentation

역방향 키 인덱스

역방향 키 인덱스에서
는 열 순서를 유지하면서 서로 물리적 인덱스 키의 바이트를 반대로 B 트리 인덱스 의 유형이다. 예를 들어, 인덱스 키가 20이고,이 키에 대해 16 진수로 두 개의 바이트가 저장되면 표준 B- 트리 인덱스에서 C1,15 인 경우 역방향 키 인덱스는 바이트를 15, C1로 저장합니다.

키를 반대로하면 B 트리 색인의 오른쪽 인 의 리프 블록에 대한 경합 문제가 해결됩니다. 이 문제는 여러 인스턴스가 동일한 블록을 반복적으로 수정하는 Oracle RAC (Oracle Real Application Clusters) 데이터베이스에서 특히 심각 할 수 있습니다 ( ). 예를 들어, 에서 orders 테이블의 주 키는 순차입니다. 클러스터에있는 한 인스턴스는 순서 20을 추가하고 다른 인스턴스는 과 함께 21을 추가합니다. 각 인스턴스는 해당 키를 색인의 오른쪽 에있는 동일한 리프 블록에 기록합니다.

역방향 키 인덱스에서 역순으로 인덱스의 모든 리프 키에 대해 삽입을 배포합니다. 예를 들어 표준 키 인덱스에서 인접한 20 및 21과 같은 키는 이제 이 별도의 블록에 멀리 떨어져 저장됩니다. 따라서 순차 키 삽입시 I/O가보다 균등하게 분산됩니다.

일 때 인덱스의 데이터가 열 키별로 정렬되지 않기 때문에 역방향 키 배열을 사용하면 경우에 따라 인덱스 범위 검색 쿼리를 실행할 수 없게됩니다. 예를 들어 사용자가 20보다 큰 주문 ID에 대한 검색어를 발행하면 데이터베이스는 이 ID가 포함 된 블록으로 시작할 수 없으며 리프 블록을 통해 가로로 진행할 수 있습니다.