2011년 7월 19일 화요일

[Oracle.10]Database Object - Index

Database Object
데이터베이스는 테이블뿐만 아니라 데이터를 저장하고 이를 활용하는 다양한 Object 를 제공하고 있다.
2.Index
테이블의 데이터에 보다 빠르게 접근하기 위해 설계되었다. 따라서 테이블과 연관이 있지만 별개의 저장 공간에 저장되며, Oracle 데이터베이스 서버는 이를 자동으로 관리한다.
2-1) Index ?
색인이라는 뜻으로 해당 테이블의 조회결과를 빠르게 하기 위해 사용한다.
보통 Index를 테이블의 특정 칼럼에 한 개 이상 주게 되면 Index Table이 따로 만들어 진다. Index Table에는 인덱스칼럼의 row의 값과 ROWID 값이 저장되어 지며, B-TREE 구조로 저장시켜두어 검색시 좀더 빠르게 해당 데이터를 찾는데 도움을 준다.
2-2) Index 생성시 고려 사항
 - WHERE절이나 JOIN 조건으로 자주 사용되는 칼럼
 - 모든 값이 칼럼 내에서 UNIQUE한 경우
 - 넓은 범위의 값을 가진 칼럼
 - 아주 드물게 존재하는 칼럼
 - 테이블에 관리되는 데이터양이 많고, 대개 질의할 때 전체 행의 10~15% 미만이 검색의 대상이 되는 경우 ( 참고로 Oracle Version에 따라 검색 대상의 Percentage는 다르게 나타난다.)
2-3) Index 생성
CREATE INDEX index_name
ON table_name (clumn_name [,column_name]...)
SQL > CREATE UNIQUE INDEX cust_id_idx
      ON customers_index (cust_id);
위와 같은 인덱스 생성시 Oracle은 내부적으로 아래와 같은 일을 진행한다.
 - 인덱스를 지정한 칼럼 cust_id 칼럼의 값을 모두 읽는다. (Full Table Scan이 발생)
 - cust_id 칼럼의 값에 대해 오름차순 정렬
 - ROWID cust_id 값을 저장하기 위해 저장 공간 (EXTENT 단위)을 할당 한다.
 - 할당 후 값을 저장한다. 만약 인덱스를 생성할 때 테이블스페이스를 지정하지 않으면 현재 접속 중인 사용자의 기본 테이블스페이스에 인덱스 cust_id_idx를 생성한다.
2-4) Index 삭제
DROP INDEX 인덱스이름
테이블이 삭제되면 Index도 삭제되며,Index의 소유자와 DROP ANY INDEX권한을 가진 사람만Index 삭제가 가능하다.
*** 참조 문헌 : 10g로 시작하는 오라클 SQL & PL/SQL - 6장 데이터를 담을 그릇을 만들자

댓글 없음:

댓글 쓰기

언제 부터 였던가 생각해보니 아르바이트 겸 외부 컨설팅을 의뢰 받고 맥북 프로를 처음 써봤을 때 부터 였던 것 같다. 지금은 거의 대부분의 작업을 맥으로 작업을 하다 보니 윈도우에서만 실행되는 일부 프로그램들 때문과 회사 내부 ERP프로그램이 윈도우 ...