TIL 32. Database Index란?

Drageon Lee·2022년 1월 9일
0

TIL_DS & Algorithms

목록 보기
2/3

Today's topic

오늘은 Database의 index에 대해서 posting을 해보도록 하겠다. 보통 index라 하면 array에서 원소들이 있는 순서로 생각하는데 여기서의 index는 목차 개념이다. 헷갈릴 수 있지만 이번 posting은 index에 대해 알아도록 한다.

👉 What is Index?

인덱스란 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조이다. 테이블의 모든 데이터를 검색하면 시간이 오래 걸리기 때문에 데이터와 데이터의 위치를 포함한 자료구조를 생성하여 빠르게 조회할 수 있도록 돕고 있다.

[index 예시 그림]

인덱스를 활용하면, 데이터를 조회하는 SELECT 외에도 UPDATE나 DELETE의 성능이 함께 향상된다. 그러한 이유는 해당 연산을 수행하려면 해당 대상을 조회해야만 작업을 할 수 있기 때문이다.
만약 index가 없는 Table에서 검색을 할 떄는 하나하나 전체로 찾아야 하기 때문에 시간이 많이 걸린다.

👉 How to manage Index?

DBMS는 index를 항상 최신의 정렬된 상태로 유지해야지 원하는 값을 빠르게 탐색할 수 있다. 그렇기 때문에 인덱스가 적용된 column에 INSERT, UPDATE, DELETE가 수행된다면 각각 다음과 같은 연산을 추가적으로 해주어야 하며 그에 따른 부하가 발생한다.

  • Insert : 새로운 데이터에 대한 index 추가
  • Delete : 삭제하는 데이터의 인덱스를 사용하지 않는다는 작업 진행
  • UPDATE : 기존의 인덱스를 사용하지 않음 처리하고, 갱신된 데이터에 대해 인덱스 추가

👉 Why using Index(pros)?

  • 조건 검색 Where 절의 효율성
    - 데이터들이 정렬되어 저장되어 있기 때문에 해당 조건(Where)에 맞는 데이터들을 빠르게 찾아낼 수 있다.
  • 정렬 Order by 절의 효율성
    - Order by 작업은 부하가 많이 걸리는 작업인데, index의 경우는 이미 정렬이 되어있는 상태이기 떄문에 부하가 많이 걸리지 않는다.
  • MIN, MAX의 효율적인 처리 가능
    - 이미 정렬이 되어 있기에 시작과 끝 값만 가져오면 된다.

👉 Cons of Index

  • 인덱스의 가장 큰 문제점은 정렬된 상태를 계속 유지 시켜줘야 하기에 추가 작업이 필요하다.
  • 인덱스를 관리하기 위해 DB의 약 10%에 해당하는 저장공간이 필요하다.
  • 인덱스를 잘못 사용할 경우 오히려 성능이 저하되는 역효과가 발생할 수 있다.
  • 사용 안하는 index는 저장 공간을 차지하기에 바로 지워줘야 한다.

👉 Good case for index?

  • 규모가 작지 않은 table
  • 중복되는 data가 낮은 column
  • Insert, Update, Delete가 자주 발생하지 않는 column
  • JOIN이나 WHERE 또는 ORDER BY에 자주 사용되는 컬럼
  • 항상 = 으로 비교되는 컬럼

📖 출처:
https://mangkyu.tistory.com/96 [MangKyu's Diary]
https://coding-factory.tistory.com/746

My opinion

Index배열에만 있는 줄 알았는데 DB의 목차로 있는 거에 놀랐지만 사용하면 편할 것 같다는 생각을 했다. 자료구조에 대해서도 계속 공부를 해야겠다.

profile
운동하는 개발자

0개의 댓글