인덱스

박중원·2022년 6월 29일
0

오라클

목록 보기
2/3

인덱스 :
테이블내의 원하는 레코드를 빠르게 찾아갈 수 있도록 만들어진 데이터 구조로 정렬된 상태로 데이터가 저장되어 있어서 빠른속도로 원하는 데이터에 접근할 수 있다.


그렇다면 인덱스를 사용해서 데이터를 찾는 것이 무조건 효율적이지 않는냐고 할 수 있지만 꼭 그렇지만은 않다.

[인덱스를 사용해야 하는 경우]

  • 인덱스를 적용한 컬럼이 where 절에서 많이 사용되는 경우
  • join할 때 사용하는 컬럼 (PK와 FK가 이에 해당)
  • 검색 결과가 원본 테이블 데이터 2~4%에 해당하는 경우

[인덱스를 사용하면 안 좋은 경우]

  • 테이블의 행의 갯수가 적은 경우
  • 검색결과가 원본테이블의 많은 비중을 차지하는 경우
  • 원본테이블의 삽입,수정,삭제가 빈번한 경우



[ORACLE index 탐색 방식]

[1. Index Unique Scan]

Index Unique Scan은 결과로 하나의 건이 반환될 때 사용되고 칼럼이 유일한 값으로 구성이 되어야한다.
( WHERE 절에 UNIQUE INDEX의 모든 Column이 명시, Equal 연산자(=) 사용, 위 조건을 만족하지 않을 경우 INDEX RANGE SCAN)

[2. Index Range Scan]

Index Range Scan은 가장 일반적인 Index의 탐색 방식
Index를 수직 탐색 후 필요한 범위까지만 탐색 하는 방식으로 인덱스의 데이터는 정렬된 상태로 저장이 되므로 범위에 대한 탐색이 필요할때 효율적으로 데이터를 탐색할 수 있으며 리프 블록에서 다음 리프블록의 정보를 갖고 있어 다시 브랜치 블록을 읽을 필요없이 다음 데이터를 바로 읽을 수 있다.

[3. Index Full Scan]

Index Full Scan은 첫번째 리프블록까지 수직적 탐색 후, 인덱스 전체를 탐색하는 방식
주로 테이블에서 Table Full Scan의 부담이 크거나 정렬작업을 생략하기 위해 테이블 전체를 탐색하는 것보다 Index를 사용하는 것이 유리하다.
(모든 scan 방식은 인덱스를 순방향 스캔시 오름차순으로 정렬된다)

[4. Index Fast Full Scan]

index Full Scan보다 빠른 스캔.
전부를 탐색하면서 더 빠르게 결과를 얻을 수 있는 이유는 Multi-Block Read가 가능하기 때문이다. 하지만 이로 인해 정렬된 상태로 데이터를 받을 수 없다는 제한이 있습니다. Index Full Scan은 데이터의 논리적인 순서로 결과를 얻지만 Index Fast Full Scan은 데이터의 물리적 저장 구조의 순서로 받아오기 때문에 Multi-Block Read가 가능하다.

[5. Index Skip Scan]

Index Skip Scan은 Multi Column Index에서 후행 칼럼을 조건절에 사용할때 활용할 수 있다. 성별처럼 선두 칼럼의 고유 값의 개수가 적고 후행 칼럼의 고유 값이 많을 때 효과적이다.

profile
IT 클라이머

0개의 댓글