오라클 인덱스

구성욱·2024년 8월 2일
0

Oracle

목록 보기
4/6

====================
간단히 구두로 알게 된 내용을 정리해 놓은 글로

실제 정보와는 다를 수 있습니다.

[목적]
오라클에서 인덱스는 테이블에 들어있는 방대한 데이터나 여러 조건들로 쿼리의 조회 성능이 떨어지는 경우, 성능 향상을 위해 미리 생성해 두는 것.

[생성/삭제]
인덱스 생성
CREATE [UNIQUE] INDEX [스키마명.]인덱스명
ON [스키마명.]테이블명 (컬럼1 [, 컬럼2, 컬럼3, ...])

인덱스 삭제
DROP INDEX [인덱스명]

인덱스를 삭제할 때는 단일 컬럼으로 구성할 수도 있고, 잦은 빈도로 사용하는 조건이 있는 경우 여러 컬럼을 설정하여 복합 인덱스를 생성하기도 한다..

[예시]
서류접수(서류ID, 서류순번, 신청인ID, 서류접수일, 전산등록일, 서류내용, 등록구분코드, 진행상태코드)

[필요성]
위와 같은 테이블이 있을 때 다년간 축적된 데이터인 경우 방대한 데이터가 있고 키 값이 아닌 특정 조건으로 데이터를 찾고 싶은 경우 조건을 걸어서 조회할 때 조회 쿼리의 실행시간으로 낭비되는 시간을 줄이고 빠른 조회 성능을 얻고자 한다.

그래서 해당 테이블에
인덱스1(서류접수일, 등록구분코드, 진행상태코드)
와 같은 인덱스가 생성되어 있다고 가정한다.

위 상태에서 인덱스에 지정된 컬럼의 순서는 중요하다.

인덱스가 생성될 떄 각 컬럼들은 순차적으로 정렬? 되어 저장되기 때문에 인덱스를 사용하는 힌트절을 사용할 때 설정된 인덱스 컬럼 중 일부가 빠져있다면 효율을 발휘할 수 없기 때문이다.

예를들어 조건절에 서류접수일 진행상태코드만 존재하는 경우
서류접수일 컬럼에 대해서는 인덱스가 효율을 발휘하지만 그 다음 등록구분코드가 없기 때문에 등록구분코드, 진행상태코드는 인덱스의 효율을 받지 못한다.

또한 인덱스가 생성될 때 정렬이 되어 ‘이미 저장’되었기 때문에 만약

SUBSTR(서류접수일, 6), 등록구분코드, 진행상태코드가 조건으로 사용된 경우에도 서류접수일이 저장된 서류접수일과 값이 다르기 때문에 서류접수일부터 인덱스의 효율을 볼 수 없다.

그리고 range에 대한 것도 인덱스의 효율을 볼 수 없다.
Equal(=), In 처럼 이퀄에 대한 것만 인덱스 효율을 볼 수 있다.

profile
공부..

0개의 댓글