728x90
반응형

 

쿼리의 수행시간을 단축시킬 수 있는 가장 좋은 방법은 INDEX 생성 혹은 INDEX 힌트를 쓰는게 아닐까 생각합니다.

 

그러면, INDEX는 말로만 매일 인덱스, 인덱스하는데 정작 INDEX 가 무엇이고 어떤식으로 작동하는지 알기는 쉽지 않아서

공부도 할겸 같이 공유를 해볼까합니다.

 

1. INDEX 의 정의

 

인덱스란 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조이다. 

쉽게 말하면, 책의 색인과 같다고 보면된다.

( * 색인은 책에 포함 된 키워드와 주요 용어를 찾는 포인터 역할을하는 페이지를 의미합니다. )

 

오라클에서 제공하는 인덱스 종류는 총 4 가지. ( 인덱스의 종류가 이렇게 많은줄 몰랐다..)

 

  • B*TREE 인덱스
  • 비트맵 인덱스(BITMAP INDEX)
  • REVERSE KEY 인덱스
  • 함수 기반 인덱스(FUNCTION BASE INDEX)

대부분, B*TREE 인덱스를 주로 사용한다고 한다. 그래서 공부도 B*TREE 인덱스만.. 하기로

 

 

 

 

 

2. B*TREE  인덱스의 구성

 

  • 루트 블록(ROOT BLOCK) : 분기 값 저장 
  • 브랜치 블록(BRANCH BLOCK) : 분기 값 저장
  • 리프 블록(LEAF BLOCK) : 인덱스 키 값 + ROWID 저장

 

 

 

3. INDEX를 사용하면 좋은 경우

 

  • 규모가 작지 않은 테이블
  • INSERT, UPDATE, DELETE가 자주 발생하지 않는 컬럼
  • JOIN이나 WHERE 또는 ORDER BY에 자주 사용되는 컬럼
  • 데이터의 중복도가 낮은 컬럼  ( * cardinality : 전체 행에 대한 특정 컬럼의 중복 수치를 나타내는 지표 )
    : 예를 들면 스포츠라고 하면 축구,농구,배구등등 여러가지들을 다 포함해서 스포츠라고하지만
      Messi 라는 축구선수는 딱 한명입니다.  이럴때 전자는 중복도가 높기 때문에 cardinality가 낮다고 하고
      후자는 중복도가 낮기때문에 cardinality 가 높다고 할 수 있습니다.

 

인덱스가 무조건적으로 좋다곤 할 수 없습니다.

테이블 조회하는 속도랑 성능을 향상시킬 수 도 있지만 , 잘못사용할 경우 FULL로 테이블을 읽을 때보다 느려질 수 있습니다.

또한, INDEX REBUILD 등의 후속조치가 필요할 수 있습니다.

 

다음에는 인덱스 스캔에 대해서 공부를 더 해보겠습니다.

 

 

 

728x90
반응형

+ Recent posts