MySQL(DB)

MySQL 인덱스에 대해서

Bami 2023. 8. 18. 08:30
728x90
반응형

안녕하세요. 오늘은 인덱스에 대한 정리를 해볼까 합니다. 인덱스라는 단어는 DB를 다루시거나 공부해보신 분들이라면 한 번쯤은 들어보셨을거라 생각됩니다. 하지만 인덱스가 무엇인가요? 라는 질문에 답변에 "아~ DB에서 쓰는 그거!" 라고 하신 경험 있으실겁니다. 

 

그런 분들에게 제 글이 도움이 되었으면 좋겠습니다.


인덱스(Index)란?

사전적인 의미로는 데이터베이스에서 검색 속도를 향상시키기 위한 데이터 구조로 정의 되어 있지만 쉽게 설명하면 일종의 책 뒤의 찾아보기나 책 앞의 목차의 개념으로 이해하면 돼요.

 

데이터베이스 테이블에 존재하는 컬럼(열)들의 값을 기반으로 생성되고, 이 값들을 정렬하고 효율적인 검색을 가능하도록 만드는 역할을 가지고 있습니다. 데이터베이스의 테이블에 대한 빠른 검색 및 조회를 가능하게 해주는 중요한 요소로 알아두면 됩니다.


그렇다면 이것을 사용했을 때 장단점으론 무엇이 있을까요?

인덱스의 장점

  • 검색 성능이 향상됩니다.
    • 테이블의 레코드를 순차적으로 탐색하는 것보다 인덱스를 통해 필요한 데이터를 더 빠르게 찾을 수 있죠.
  • 효율적인 정렬 및 그룹화처리
    • 인덱스를 사용하면 데이터를 특정 컬럼 값을 기준으로 정렬하거나 그룹화하는 작업이 빠르고 효율적으로 수행 할 수 있죠.
  • 데이터 무결성 유지
    • 인덱스는 유니크한 값을 보장하거나 기본 키(primary key)를 지정하는데 사용되는데이를 통해 데이터의 무결성을 유지할 수 있습니다.
  • 조인 성능 향상
    • 여러 테이블을 조인할 때 인덱스가 적절하게 설정되어 있다면 조인 작업의 성능이 개선될 수 있죠.

인덱스의 단점

  • 데이터 베이스의 저장 공간이 사용됩니다.
    • 인덱스는 데이터의 복사본을 유지하기 때문에 데이터베이스의 저장 공간을 늘릴 수 있습니다.
      때문에 큰 테이블의 경우 인덱스로 인해 저장 공간이 중요한 부분을 차지할 수 있죠.
  • 쓰기 작업의 성능 저하
    • 데이터의 삽입, 갱신, 삭제 작업을 수행할 때 인덱스도 함께 갱신되어야 하기 때문에 쓰기 작업의 성능이 저하될 수 있습니다.
      그리고 데이터의 변경 작업이 빈번하게 일어날 경우 인덱스의 업데이트가 오버헤드를 초래할 수 있습니다.
  • 잘못된 인덱스 사용
    • 인덱스를 잘못 설계하거나 과도하게 많은 인덱스를 생성하면 오히려 성능이 저하될 수 있어 불필요한 인덱스는 관리 비용만 증가시킬 수 있습니다.

그렇다면 이 인덱스는 언제 사용하면 좋을까요?

  • 데이터 검색이 빈번한 컬럼에 사용하면 좋습니다.
    • 자주 검색되는 컬럼에 인덱스를 생성하여 데이터 검색 속도를 향상시킬 수 있습니다. 예를 들어, 사용자의 이름이나 나이와 같은 컬럼은 자주 검색되므로 인덱스를 생성하면 좋습니다.
  • 조인 연산이 필요한 경우
    • 조인 작업은 여러 테이블 간의 연결을 필요로 하며, 이 때 인덱스를 활용하여 조인 성능을 향상시킬 수 있습니다. 조인 조건에 사용되는 컬럼들에 인덱스를 생성하면 좋습니다.
  • 유니크한 값이 필요한 경우
    • 유니크한 값이 보장되어야 하는 컬럼은 유니크 인덱스를 생성하여 데이터 무결성을 유지할 수 있습니다.
      예를 들어, 이메일 주소나 주민등록번호와 같은 식별자 컬럼은 유니크 인덱스를 고려해볼 만합니다.
  • 대량의 데이터를 정렬하거나 그룹화해야 하는 경우
    • 정렬된 결과를 얻거나 그룹화된 데이터를 추출하는 작업에서도 인덱스는 성능 향상에 기여할 수 있습니다.
  • 범위 검색이나 정렬이 필요한 경우
    • 범위 검색 (가격 범위, 날짜 범위 등)을 수행하거나 정렬된 결과를 얻어야 할 때, 해당 컬럼에 인덱스를 생성하면 빠른 성능을 얻을 수 있습니다.

인덱스를 선택할 때에는 실제 데이터베이스 시스템과 환경을 고려하여 성능 테스트와 모니터링을 통해 최적의 인덱스 전략을 결정하는 것이 좋습니다.

728x90
반응형