Tibero4 기본강좌
Index 관리 0 0 99,999+

by 티베로 Tibero Object Tibero Index [2009.12.03]


Index (이하 인덱스)

테이블에서 원하는 데이터를 빠르게 검색하기 위해 사용하는 데이터 구조이다. 인덱스는 테이블과 같이 독립적인 스키마 객체이기 때문에 인덱스를 생성, 변경, 제거, 저장할 수 있다.

인덱스의 종류는 다음과 같다.

인덱스 설명
단일 컬럼 인덱스(Single Index) 하나의 컬럼으로 만든 인덱스이다.
복합 인덱스(Concanated Index) 하나 이상의 컬럼으로 만든 인덱스이다.
유일 인덱스(Unique Index) 테이블에서 유일한 값을 갖는 컬럼으로 만든 인덱스이다.
비유일 인덱스(Non-Unique Index) 테이블에서 중복된 값을 갖는 컬럼으로 만든 인덱스이다.

인덱스의 관리

인덱스의 생성

인덱스를 생성하기 위해서는 CREATE INDEX 문을 사용해야 한다.

다음은 인덱스를 생성하는 방법이다.

CREATE [Unique] INDEX index_name 
    ON [schema.]table (column[ASC|DESC][,column]) 
       [Tablespace tablespace_name] 
       [Initrans integer];

  • - Unique: Unique 인덱스 여부를 설정한다.
  • - index_name: 생성할 인덱스의 이름을 설정한다.
  • - column [ASC | DESC ][,column]: 해당 컬럼의 정의와 정렬 방향을 지정한다.
  • - Tablespace tablespace_name: 해당 인덱스를 저장할 테이블스페이스를 지정한다.
  • - Initrans integer: 디스크 블록의 파라미터(INITRANS) 값을 설정한다.

다음은 인덱스를 생성하는 예이다.

CREATE INDEX EMP_FK ON EMP (DEPTNO);

인덱스의 삭제

인덱스를 삭제하기 위해서는 DROP INDEX 문을 사용해야 한다.

인덱스는 테이블과 같이 독립적인 스키마 객체이기 때문에 삭제해도 테이블의 데이터에는 영향을 미치지 않는다. 단, 인덱스를 삭제하면 해당 컬럼의 데이터를 조회할 때 이전과는 다르게 조회 속도가 느려질 수 있다.

다음은 인덱스를 삭제하는 예이다.

DROP INDEX EMP_FK;

인덱스의 검색 유형

Tibero RDBMS에서는 인덱스의 기본 구조로 B-트리를 제공한다. 이를 이용하여 단일 키 검색(single key search), 범위 검색(range search), 복합 키 검색(composite key search)을 수행할 수 있다.

인덱스를 이용하여 테이블의 로우를 검색하는 방법은 다음과 같다.

  • - 단일 키 검색 : 하나의 키를 갖는 로우를 검색하는 방법이다. 인덱스가 유일 인덱스인 경우에는 하나의 키를 갖는 한 개의 로우만 검색되며, 비유일 인덱스의 경우에 는 여러 개의 로우가 검색된다.
  • - 범위 검색 : 검색 범위에 포함되는 키를 갖는 로우를 모두 검색하는 방법이다.
  • - 복합 키 검색 : 서로 다른 두 개 이상의 컬럼을 하나의 키로 조합하여 검색하는 방법이다.

인덱스의 효율적 관리

인덱스를 효율적으로 관리하기 위해서는 다음과 같이 해야한다.

  • - 인덱스가 필요한 테이블과 컬럼에만 생성하는 경우 인덱스는 데이터의 저장 공간과 데이터베이스 성능에 영향을 미친다. 인덱스를 생성하면 데이터를 저장하기 위한 별도의 공간이 필요하며, 테이블에 로우가 삽입, 변경, 제거될 때마다 인덱스도 함께 갱신 된다.
  • - 기본 키가 적용된 컬럼과 함께 조인 연산의 대상이 되는 컬럼의 경우 인덱스를 생성한다는 것은 컬럼에 정렬을 수행한 결과를 저장한다는 의미이다. Tibero RDBMS에서는 정렬된 컬럼 간의 조인 연산을 더욱 효율적으로 수행한다. 이러한 결과는 조인의 대상이 되는 테이블이 컸을 때 효과적이다.
  • - WHERE 절의 검색 조건에 포함되는 빈도가 높으며, 검색 결과가 전체 테이블의 10% 이하인 컬럼의 경우 단일 키 검색의 경우 인덱스가 없으면 전체 테이블을 액세스한다. 반면에 인덱스가 있으면 하나의 로우만 액세스하므로 검색 성능을 향상시킬 수 있다.
  • - 사용 빈도가 낮거나 필요 없는 인덱스는 제거한다.
  • - 하나의 테이블에 많은 수의 인덱스는 생성하지 않는다.
  • - 시스템의 성능 향상을 위해 인덱스와 테이블은 서로 다른 디스크에 저장한다.

인덱스의 정보 조회

Tibero RDBMS에서는 인덱스의 정보를 제공하기 위해 다음 표에 나열된 정적 뷰를 제공하고 있다. DBA나 일반 사용자 모두 사용할 수 있다.

정적 뷰 설명
DBA_INDEXES Tibero RDBMS 내의 모든 인덱스의 정보를 조회하는 뷰이다.
USER_INDEXES 현재 사용자에 속한 인덱스의 정보를 조회하는 뷰이다.
ALL_INDEXES 사용자가 접근 가능한 인덱스의 정보를 조회하는 뷰이다.
DBA_IDX_COLUMNS Tibero RDBMS 내의 모든 인덱스에 적용된 컬럼의 정보를 조회하는 뷰이다.
USER_IDX_COLUMNS 현재 사용자에 속한 인덱스에 적용된 컬럼의 정보를 조회하는 뷰이다.
ALL_IDX_COLUMNS 사용자가 접근 가능한 인덱스에 적용된 컬럼의 정보를 조회하는 뷰이다.

- 강좌 URL : http://www.gurubee.net/lecture/2084

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입