Index 알아보기

Index 필요성과 주의사항에 대해 알아보기

면접 필수 질문이자 데이터베이스에서 중요한 인덱스에 대해 정리해보았습니다.

면접 질문

Index가 필요한 이유는?

  • 테이블 검색 성능을 높여주는 대표적인 방법 중 하나입니다.
  • 일반적인 RDBMS에서는 B+Tree 구조로 된 Index를 사용하여 검색속도를 향상시킵니다.

Index는 책마다 마지막 페이지에 있는 색인과 같은 역할을 하는 자료구조 입니다.
책에서 어떤 용어나 단어를 찾기위해 첫 페이지를 끝 페이지까지 훑지 않아도(Full Table Scan),
Index를 찾아보면 몇 페이지에 있는지 바로 찾을 수 있는 것과 같습니다.

SELECT 쿼리를 통해 데이터를 찾을 때, 정렬되어 있는 Index에서 빠르게 검색을 할 수 있습니다.

Index는 어떤 컬럼에 지정해야 할까요?

  • Where 절에서 자주 조회되고,
  • 수정 빈도가 낮으며,
  • 카디널리티는 높고,
  • 선택도가 낮은 컬럼을 선택하는 것이 좋습니다.

카디널리티란 특정 컬럼의 중복되지 않는 정도를 뜻합니다.

선택도란 데이터 집합에서 특정 값을 잘 골라낼 수 있는 정도를 뜻합니다.
(선택도가 1이라는 뜻은 모든 값이 유니크하다는 의미입니다.)

Index의 단점은?

  • 추가 저장공간이 필요합니다.
    : Index를 생성하면, Index 자료구조를 위한 저장 공간이 추가적으로 필요합니다.
      (보통 테이블 크기의 10% 공간을 차지합니다.)
  • 데이터 변경 작업이 느립니다.
    보통 B+Tree 구조의 Index는 데이터 변경 시 Tree 구조가 변경 될 수 있어 인덱스의 재구성이 필요하게 되므로,
    변경이 자주 일어나게 되면 성능이 나빠질 수 있습니다.

Index

Clustering Index & Secondary Index

  • Clustering Index : 특정 컬럼을 기본키로 지정하면 자동으로 클러스터형 인덱스가 생성하고, 해당 컬럼 기준으로 정렬 됩니다.
  • Secondary Index : 별도로 인덱스를 생성하거나 고유키(unique key)로 지정하면 별도의 공간에 인덱스가 생성됩니다.

B+Tree Index

  • 항상 정렬된 상태를 유지하여 부등호 연산에 유리합니다.
  • 데이터 탐색 뿐만 아니라 저장, 수정, 삭제에도 항상 O(logN)의 시간 복잡도를 갖습니다.

Hash Index

  • 빠른 데이터 검색 O(1)이 필요할 때 유용합니다.
  • 하지만 사용되는 경우가 제한적입니다.
  • 그 이유는 hash index는 등호(=) 연산에만 특화되어 있기 때문입니다.
  • 데이터가 조금이라도 달라지면 hash function은 전혀 다른 hash 값을 생성하기 때문에,
  • 부등호 연산(>, <)이 자주 사용되는 DB 검색에는 적합하지 않습니다.

© 2021. All rights reserved.

Powered by Hydejack v9.1.6