Clustered Index & Non-Clustered Index 

 

테이블을 생성 후 Primary Key를 생성하면 기본적으로 Clutered Index로 지정이 됩니다.(클러스터형 인덱스가 없는 경우)

하지만, 데이터를 파악하고 인덱스를 걸면 가장 효율적인 컬럼을 클러스터 인덱스로 지정하는것을 권장합니다.

 

Clustered Index

  • 해당 컬럼을 기준으로 정렬, 테이블당 1개씩만 허용
  • Clustered Index가 적용된 컬롬은 CUD 작업이 진행될 경우 데이터의 정렬에 관여합니다. 
  • 되도록이면 UNIQUE 해야합니다.  UNIQUE하지 않으면 안되는것이 아니라 UNIQUE하지 않는 경우 오버헤드가 발생하는 것을 인지해야합니다.
  • SP_COLUMNS 명령을 이용해서 사용빈도(높음), 데이터길이(짧음), UNIQUE여부(되도록이면) 인 컬럼을 지정합니다.
  • 목차를 보고 해당 페이지를 찾아 가는것이 아니라 바로 해당 페이지를 찾아가는 것입니다.

 

Non-Clustered Index

  • 한 테이블에 여러개를 생성 할 수 있습니다. (최대 240개)
  • 목차를 보고 해당 페이지를 찾아가는 형태의 검색 방식입니다
  • 테이블에 대한 인덱스를 많이 만들면 테이블의 데이터가 변경될 경우 인덱스도 모두 적절하게 조정되어야 하므로 INSERT, UPDATE, DELETE  MERGE 문의 성능이 저하될 수 있습니다.
  • 쿼리의 조건자 및 조인 조건에서 자주 사용되는 열에 대해 비클러스터형 인덱스를 만듭니다. 

ORA-01502: 인덱스 분할영역은 사용할 수 없은 상태입니다 를 만났다.

 

이러한 현상은 보통 테이블 파티션이 이동하거나 , 테이블 스페이스 이동 , 병합등의 사유로 인덱스 참조가 깨진 현상이라고 볼 수 있다

 

해결방법은 가장 간단한 방법으로 Index Rebuild를 수행한다.

alter index your_table_name rebuild

위 구문으로 해결할 수 있다. 그러나..

파티션 테이블로 구성되어 있다면 다른 구문을 사용해야한다.

 

아래와 같은 구문을 수행해야하며 파티션 단위로 재 생성 해주어야 한다.

alter index your_table_name rebuild partition your_partition_name ;

global partition index의 경우 non-partition index, partition index 등 파티션 테이블 관련 작업인 경우 재 생성이 필수 이다.

따라서 파티션 테이블별로 global index의 rebuild 작업용의 스크립트를 작성해 놓아야 빠른 시간안에 관련 인덱스를 재 생성 할 수 있다

 

Rebuild 일괄생성 구문

SELECT 'ALTER INDEX '||INDEX_NAME||' REBUILD ;' FROM USER_INDEXES;

'DB > Oracle' 카테고리의 다른 글

Oracle Database 기초 #1  (1) 2022.03.25
TNSPING 이용한 접속 테스트  (0) 2021.02.16
자주쓰는 함수 정리 - 문자열 함수  (0) 2020.04.03
Oracle 함수 정리  (0) 2020.03.16
ORA-28001: the password has expired  (0) 2018.07.18

+ Recent posts