1. 설명
    1. 데이터베이스 테이블 검색 성능을 높여주는 자료구조
    2. 특정 컬럼에 인덱스를 생성하면 해당 컬럼의 데이터들을 정렬하여 별도의 메모리 공간에 데이터의 물리적 주소와 함꼐 저장
    3. 인덱스 참조 시 인덱스에 저장되어 있는 데이터의 물리적 주소로 가서 조회해 오는 방식
    4. 책에 있는 목차라고 생각
  2. 사용이유
    1. where 검색의 효율성
      1. 데이터가 쌓이면서 내부적으로 순서가 뒤죽박죽 저장되는데 인덱스가 없거나 참조하지 못한다면 FTS
      2. 인덱스 테이블은 데이터가 물리적으로 저장되어 있기 떄문에 조건에 맞는 데이터들을 빠르게 조회
    2. order by의 효율성
      1. 인덱스 생성 시 정렬하여 저장하기 때문에 부하가 큰 order by에서 효과적
    3. Min, max 처리
      1. 시작과 끝 값을 한건만 가져오기 때문에 FTS보다 효율적
  3. 단점
    1. 정렬된 상태를 계속해서 유지해야하기 때문에 DML로 인한 레코드 내 데이터 값 변경 시 인덱스를 재정렬 해야하기 때문
    2. 무조건 index가 좋은 것이 아니라 전체 데이터의 10~15% 조회 시 유리하며 대용량 데이터 조회 시 FTS이 유리할 수 있음
    3. 인덱스가 저장공간을 차지하기 때문에 스토리지 관리에도 고려해야함
  4. 인덱스 생성 전략
    1. 조건절에 자주 등장하는 컬럼
    2. 항상 = 으로 비교되는 컬럼
    3. 선택도가 낮은 컬럼
    4. 정렬을 자주하는 컬럼
    5. 조인 조건건으로 사용 되는 컬럼
  5. B*tree 인덱스
    1. 설명
      1. DBMS에서 가장 많이 사용되는 인덱스 구조는 밸런스드 트리 인덱스
      2. 항상 정렬된 상태를 유지하기 때문에 시간복잡도가 O(logN)이므로 탐색 시간에 매우 효율적인 자료구조
      3. 항상 좌우 자식 노드 개수의 밸런스를 유지하기 때문에 최악의 경우에도 O(logN) 시간을 유지하기 떄문
    2. B tree가 DB 인덱스 용도로 가장 적합한 자료구조인 이유
      1. 항상 정렬된 상태로 특정 값보다 크고 작은 부등호 연산에 문제가 없음
      2. 참조 포인터가 적어 방대한 데이터 양에도 빠른 메모리 접근 가능
      3. 데이터 탐색 뿐만 아니라 저장, 수정, 삭제에도 항상 같은 시간 복잡도를 가짐(O(logN)
    3. 데이터 접근이 빠른 자료구조인 배열이 db 인덱스로 선택 받지 못하는 이유
      1. 배열 내에서 데이터 저장, 삭제가 일어나는 순간 B-tree보다 비효율적인 성능이 발생함
      2. 중간에 데이터 삽입 시 해당 데이터보다 큰 데이터는 한 칸씩 뒤로 물러나게 되는데 이때 발생하는 평균 시간 복잡도가 O(N+logN) = O(N)
      3. 즉 일관적으로 빠른 시간복잡도를 유지하기 위해서 B-tree로 선택

'Develop > DB 일반' 카테고리의 다른 글

트랜잭션과 격리수준  (0) 2021.12.23
조인의 방식 및 종류  (0) 2021.12.23

+ Recent posts