본문으로 바로가기

[oracle]오라클 인덱스 생성 및 관리

category IT/DB 2019. 5. 30. 09:00


안녕하세요 오라클 인덱스 항목에 대해 다뤄보고자 합니다. 

인덱스 는 오라클을 운영 함에 있어 중요한 항목중 하나 입니다. 

운영함에 있어 중요하지 않은 것은 없지만, 

DB 의 성능 면에 있어 인덱스 를 만들고 관리 하는 것에 있어 큰 차이가 있기 때문에 

오라클 인덱스 생성 부터 관리, 삭제 까지 한번 알아 보도록 하겠습니다. 


오라클 인덱스 란?


무엇을 하던지 일단 그것이 무엇인지 알고 지나가야 하기에 

오라클 인덱스 가 무엇인지 부터 살펴 보겠습니다. 


오라클 인덱스란 

테이블이나 클러스트에서 쓰여지는 선택적인 객체로서, 데이터베이스 테이블내의 원하는 레코드를 빠르게 찾을수 있도록 만들어진 데이터 구조 입니다. 


쉽게 요약하면,

전화번호 부의 ㄱ,ㄴ,ㄷ 처럼 데이터베이스 테이블 내의 데이터 들의 위치 를 요약해 놓는 것 입니다. 



대략 이런 느낌이라고 생각 하시면 됩니다. 


오라클 인덱스 생성 및 변경 방법 



SQL> create index i_test on test(age);

Test 테이블의 age 컬럼을 이용하여 i_test 라는 인덱스 생성 



SQL> alter index i_test rename to in_test;

i_test 인덱스 명을 in_test 로 변경 


SQL> select owner,table_name,index_name from dba_indexes where table_name='TEST';

TEST 테이블의 ownet, table_name,index_name 조회 (변경여부 확인)


PK 컬럼 의 인덱스는?




SQL> select table_name, index_name from dba_indexes where table_name='TEST';

TEST 테이블의 index 조회 


위 예제의 테이블 test 테이블의 PK 는 EMAIL 이라는 컬럼입니다.

PK 로 테이블을 생성 하고 운영 중일 경우는 인덱스가 자동 생성 되며 이경우 인덱스 명은 SYS_xxxx 으로 생성 됩니다.


여러 컬럼을 지정하여 인덱스 생성이 가능할까?




SQL> create index i_test2 on scott.test(name,age);

TEST 테이블의 name 와 age 컬럼을 i_test2 이름의 인덱스 생성


SQL> select table_name, index_name from dba_indexes where table_name='TEST';

TEST 테이블의 인덱스 조희 I_TEST2 인덱스 생성 확인 


위와 같이 여러개의 컬럼 을 가지고 인덱스 생성이 가능하다. 

자주 조회 하는 컬럼들을 한번에 묶어서 인덱스 생성이 가능하다는 이야기입니다. 


하지만 너무 많은 인덱스 생성은 성능 저하의 원인이 될수 있으니, 

인덱스 생성 및 운영이 만능은 아니라는 것은 알아 두면 좋을듯 합니다. 




뛰어난 실력과  많은 학습 많은 현장에서 겪어 보신

 분들의 소중한 댓글 지적 감사히 받도록 하겠습니다.