Database - INDEX

dongle·2022년 12월 4일
0

Database - Index


정의

“데이터베이스 테이블에 대한 검색 성능의 속도를 높여주는 자료 구조”

색인 이라고 생각하면 쉽습니다. 색인은 책 뒤에서 '그 내용을 알고 싶으면 몇 페이지로 가라'라고 지름길을 안내해주는 것으로,흔히 '찾아보기'라고 되어 있는 부분이 바로 색인입니다. 인덱스도 인덱스에서 내가 원하는 데이터를 먼저 찾고 저장되어 있는 물리적 주소로 찾아갑니다.

왜 사용하나요? (장점)

테이블에 데이터들이 인덱스의 가장 큰 특징은 데이터들이 정렬이 되어 조건 검색이라는 영역에서 장점이 있습니다. 즉, DB 데이터의 주소를 가지고 있어 원하는 데이터를 빠르게 찾을 수 있습니다.

  1. 조건 검색 Where 절의 효율성
    where절에 특정 조건에 맞는 데이터들을 찾아낼때도 레코드의 처음부터 끝까지 다 읽어서 검색 조건과 맞는지 비교해야 합니다. 이것을 풀 테이블 스캔 (Full Table Scan)이라고 합니다. 하지만 인덱스 테이블은 데이터들이 정렬되어 저장되어 있기 때문에 해당 조건 (Where)에 맞는 데이터들을 빠르게 찾아낼 수 있습니다.
    이것이 인덱스(Index)를 사용하는 가장 큰 이유라고 할 수 있습니다.
  2. 정렬 Order by절의 효율성
    Order by에 의한 Sort과정을 피할수가 있습니다.
    Order by는 굉장히 부하가 많이 걸리는 작업입니다. 정렬과 동시에 1차적으로 메모리에서 정렬이 이루어지고 메모리보다 큰 작업이 필요하다면 디스크 I/O도 추가적으로 발생됩니다. 하지만 인덱스를 사용하면 이러한 전반적인 자원의 소모를 하지 않아도 됩니다. (이미 정렬이 되어 있기 때문에 가져오기만 하면 됨)
  3. MIN, MAX의 효율적인 처리가 가능하다
    데이터가 정렬되어 있어 MIN값과 MAX값을 레코드의 시작값과 끝 값 한건씩만 가져오면 되기에 FULL TABE SCAN으로 테이블을 다 뒤져서 작업하는 것보다 훨씬 효율적으로 찾을 수 있습니다.

단점

  1. 타 성능의 악영향을 줌
    데이터 조회(SELECT)를 제외한 모든 동작,즉, INSERT / UPDATE / DELETE 성능에 영향을 미친다.
    ⇒ 데이터를 삽입하고 수정하고 삭제하는데, 사용하는 동작이나, 이로 인해 인덱스를 걸어둔 컬럼의 데이터가 수정되면 인덱스 테이블의 수정도 필요하게되어 데이터의 삽입/수정/삭제 작업이 두 번 이루어지게 됨
  2. 추가 저장공간 필요
    DB에 저장된 데이터의 주소를 인덱스의 Key 값으로 가지려면 별도의 공간에 저장하므로 추가 저장 공간이 필요합니다.
    ⇒ 인덱스를 사용하는 시스템을 설계할 때, 인덱스 영역을 전체 테이블 영역의 30-50% 까지 잡아놓을 만큼 추가 저장공간이 필수적이라고 할 수 있습니다.

사용하는 자료구조

1) B-Tree
B-Tree

특징)

  • Binary Serch Tree를 확장한 트리구조
  • 각 노드는 여러개의 Key를 가질 수 있고, 여러개의 child를 가질 수 있음
  • 각 노드에는 여러개의 Key를 가지며 각 Key에 대응하는 Data도 함께 가지고 있음
  • 모든 Leaf 노드는 동일한 Depth를 가지고 있음

— 루트를 제외한 모든 노드의 자료수는 LIMIT/2개 여야 하며, 자식 노드의 수는 (부모 노드의 자료수 + 1)개 여야 하는 특징이 있습니다.

위 그림은 3 Order B-Tree이며 각 노드는 최대 2개의 키를 가질 수 있고, 최대 3개의 Child를 가질 수 있습니다.

→ 삽입, 삭제시에도 트리 균형을 유지할 수 있음

→ 균등한 탐색속도

→ 트리의 균형을 유지하기 휘해 복잡한 연산 + 중위 순회방식을 사용해 순회 탐색이 비효율적

2) B+Tree

특징)

  • B-Tree를 개량한 트리구조

  • B-Tree처럼 모든 Leaf Node는 동일한 Depth를 갖습니다.

  • B-Tree와의 가장 큰 차이점은 Inner Node에는 Key만 저장이 되고 Leaf Node에 Key 와 Data를함께 저장한다는 점 입니다.

  • Inner Node는 Data가 없기 때문에 B-Tree의 Inner Node에 비해 용량이 작습니다.
    → 하나의 Disk Block에 더 많은 Inner Node를 배치할 수 있게 되어 Key 탐색시 B-Tree에 비하여 상대적으로 적은 Disk Block만 읽어도 됩니다.

  • Leaf Node에만 Data가 저장되기 때문에 Leaf Node간의 Pointer를 연결하여 B-Tree에 비하여 쉬운 순회가 가능합니다.

  • 위 그림은 4 Order B+ Tree를 나타내고 있습니다.
    InnerNode는 최대 2개의 Key를 가질 수 있고, Leaf Node는 최대 3개의 Key/Value를 가질 수 있습니다.

참고

https://m.blog.naver.com/bsww201/221906066898

https://siahn95.tistory.com/entry/DB-인덱스란-1-개념-장단점-쓰는-이유

profile
개발자를 꿈꾸는 학생입니다!

0개의 댓글