인덱스(index)란?

강우엉·2024년 1월 23일
0

study

목록 보기
41/44

💡 인덱스(index)란?

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

책으로 예를 들어보자. 페이지가 많은 책에서 내가 원하는 내용을 찾기 위해 모든 페이지를 찾으려면 많은 시간이 걸린다. 따라서 책에는 색인을 추가하여 원하는 내용을 찾기 용이하게 도와준다.

데이터베이스에서 index가 책에서의 색인이라고 생각하면된다.
하나의 데이터를 찾기위해 모든 데이터를 검색하지않도록 데이터와 데이터의 위치를 포함한 자료구조를 생성하여 빠르게 조회하도록 한다.

💡 인덱스의 장단점

📌 장점

  • Where절의 성능 향상: 보통 조건 검색 Where절을 사용하면 특정 조건에 맞는 데이터를 찾기위해 모든 데이터를 다 비교해야한다. 인덱스를 통해 빠르게 조회하여 성능을 향상시킬 수 있다.

    • 따라서 SELECT절 뿐만 아니라 UPDATE, DELETE절도 같이 성능이 향상된다.
  • Order by절의 성능 향상: 인덱스를 통해 미리 정렬해놓기때문에 Order by절에서 부하가 많이 걸리는 작업인 sort 과정을 생략할 수 있다.

  • MIN, MAX의 성능 향상: 인덱스를 통한 정렬이 이미 되어있기에 효율적으로 찾을 수 있다.

📌 단점 (사용 시 주의사항)

  • 정렬된 상태를 유지: index를 항상 최신의 정렬 상태로 유지해야한다. 인덱스가 적용된 컬럼에 INSERT, UPDATE, DELETE가 수행된다면 아래와 같은 연산을 추가적으로 해주어야 하며 그에 따른 오버헤드가 발생한다.

    • INSERT: 새로운 데이터에 대한 인덱스를 추가함

    • DELETE: 삭제하는 데이터의 인덱스를 사용하지 않는다는 작업을 진행함

    • UPDATE: 기존의 인덱스를 사용하지 않음 처리하고, 갱신된 데이터에 대해 인덱스를 추가함

  • 데이터가 적은 테이블은 사용 X

    • 데이터가 많은 테이블은 인덱스를 사용하여 스캔하는것이 효율적이지만 데이터가 적은 테이블은 전체를 스캔하는것이 성능에 더 효율적이다.
  • 데이터의 대부분을 조회하는 경우 사용 X

  • 무조건 많이 인덱스를 사용 X

    • 인덱스를 관리하려면 데이터베이스의 10% 정도의 저장공간이 필요하다.
      따라서 너무 많은 인덱스는 데이터베이스의 성능저하의 이유가 될 수 있다. 인덱스 생성 전 SQL문을 더 효율적이게 짤 수 있도록 고민하는 것이 좋다.

Reference

profile
우엉이의 코딩 성장일기💻

0개의 댓글