[SQL 최적화의 원리]인덱스(Index)

yellong·2020년 5월 25일
0

SQLD

목록 보기
2/27
post-thumbnail

인덱스(Index)란?

  • 인덱스는 데이터를 빠르게 검색할 수 있는 방법을 제공한다.
  • 인덱스는 인덱스 키(ex EMPNO)로 정렬(SORT)되어 있기 때문에, 원하는 데이터를 보다 빠르게 조회한다.
  • 오름차순(Ascending), 내림차순(Descending) 탐색이 가능하다.
  • 하나의 테이블에서 여러 개의 인덱스를 생성할 수 있고, 하나의 인덱스는 여러 개의 칼럼으로 구성될 수 있다.
  • 테이블을 생성할 때 Primary Key에는 자동으로 인덱스가 만들어지고, 인덱스의 이름은 SYSXXXX이다.
  • 인덱스의 구조는 Root Block, Branch Block, Leaf Block으로 구성되고, Root Block은 인덱스의 트리에서 가장 상위에 있는 노드를 의미하며, Branch Block은 다음 단계의 주소를 가지고 있는 포인터로 되어 있다
  • Leaf Block은 인덱스 키와 ROWID로 구성되고, 인덱스 키는 정렬되어 저장된다.

인덱스 생성

  • CREATE INDEX문을 사용하여 생성이 가능하다.
    • ex) CREATE INDEX IND_EMP ON EMP (ENAME ASC, SAL DESC)
    • ENAME에 대해 오름차순, SAL에 대해 내림차순으로 정렬하는 인덱스 IND_EMP를 생성.

인덱스 스캔(Index Scan)

  • 인덱스 유일 스캔(Index Unique Scan)
    • 인덱스의 키 값이 중복되지 않는 경우, 해당 인덱스를 사용할 때 발생한다.
  • 인덱스 범위 스캔(Index Range Scan)
    • SELECT문에서 특정 범위를 조회하는 WHERE문을 사용할 경우 발생한다.
    • Like, Between이 대표적인 예이다. 단, 데이터 양이 적은 경우에는 인덱스 자체를 실행시키지 않고 TABLE FULL SCAN이 될 수 있다.
    • Index Range Scan은 인덱스의 Leaf Block특정 범위를 스캔한 것이다.
  • 인덱스 전체 스캔(Index Full Scan)
    • 인덱스에서 검색되는 키가 많은 경우에, Leaf Block의 처음부터 끝까지 전체를 읽어 들인다.
    • Table Full Scan 시에 High Watermark란?
      • Table Full Scan은 테이블의 데이터를 모두 읽은 것을 의미한다.
      • 테이블을 읽을 때, High Watermark 이하까지만 Table을 Full Scan한다.
      • High Watermark는 테이블에 데이터가 저장된 블록에서 최상위 위치를 의미하고, 데이터가 삭제되면 High Watermark가 변경된다.

파티션 인덱스(Partition Index)

구분주요 내용
Global Index여러 개의 파티션에서 하나의 인덱스를 사용한다.
Local Index해당 파티션 별로 각자의 인덱스를 사용한다.
Prefixed Index파티션 키와 인덱스 키가 동일하다.
Non Prefixed Index파티션 키와 인덱스 키가 다르다.

이 게시물은 "SQL 개발자 이론서+기출문제(이기적)"을 참고하여 작성되었습니다. :)

0개의 댓글