이직준비/CS

DataBase의 인덱스 (Index) 란?

hyun-1200 2022. 7. 28. 00:24

- 인덱스는 데이터베이스 분야에 있어서 테이블에 대한 동작의 속도를 높여주는 자료 구조를 일컫는다.

- 인덱스로 데이터의 위치를 빠르게 찾아주는 역할을 합니다.

- 사용자는 데이터베이스에 저장된 자료를 더욱 빠르게 조회하기 위하여 인덱스를 생성하고 사용한다. 

 

1. DB 인덱스(INDEX) 란?

데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조

책 앞에 있는 목차라고 생각하면 이해하기 쉽습니다. 수천 장이 넘아가는 책 내용에서 원하는 정보만 빠르게 찾을 수 있는 이유도 목차가 있기 때문입니다. 마찬가지로 DB 테이블에 많은 양의 데이터를 모두 확인하면서 원하는 데이터를 찾는 것은 매우 비효율적인 일입니다. 데이터베이스도 목차처럼 데이터와 데이터 위치를 포함하는 자료구조를 통해 데이터 조회를 빠르게 돕습니다. 이 자료구조를 인덱스(Index)라고 합니다.

 

2. DB 인덱스 사용 시 장점과 단점

2.1. DB 인덱스 장점

  • 테이블에서 검색과 정렬 속도를 향상시킵니다.
  • 질의나 보고서에서 그룹화 작업의 속도를 향상시킵니다.
  • 인덱스를 사용하면 테이블 행의 고유성을 강화시킬 수 있습니다.

2.2. DB 인덱스 단점

  • 인덱스가 데이터베이스 공간을 차지해 추가적인 공간이 필요합니다.(약 10%)
    • 인덱스를 저장하는 데 필요한 디스크 공간은  보통 테이블을 저장하는 데 필요한 디스크 공간보다 작다. 
  • 인덱스 관리를 위한 추가 작업이 필요합니다.
  • 잘못 사용하는 경우 성능 저하를 일으킬 수 있습니다.
  • 데이터 변경 작업이 자주 일어날 때 인덱스를 재작성해야 할 필요가 있어 성능에 영향을 끼칠 수 있습니다.

 

3. 특징

 

  • 인덱스는 WHERE 절에서 효과가 있다.
  • order by절에서 효과가 있다.
  • 데이터가 정렬되어 있기 때문에 min,max 의 효율적인 처리가 가능하다.   
  • DML 에서 select 쿼리는 성능이 좋지만 외에 update, insert, delete 쿼리에서는 때에 따라 다르다. 
  •  인덱스는 하나 혹은 여러 개의 컬럼에 대해 설정할 수 있습니다. 단일 인덱스를 여러 개 생성할 수도, 여러 컬럼을 묶어 복합 인덱스를 설정할 수도 있습니다그러나 무조건 많이 설정하는게 검색 속도 향상을 높여주지는 않습니다.
  • 인덱스는 데이터베이스 메모리를 사용하여 테이블 형태로 저장되므로 개수와 저장 공간은 비례합니다.

따라서,

  • 조회시 자주 사용하고
  • 고유한 값 위주로
  • Cardinality 높을수록 (= 중복횟수가 적을수록) 
    • '학번' 컬럼은 '이름' 보다 중복횟수가 적습니다. 따라서 '학번' 컬럼을 인덱스로 사용하는 것이 더 효율적입니다. 
  • 일반적으로 PK 값을 인덱스로 거는 것이 좋다. 

 

4. 비교

DB에서 자료를 검색하는 두 가지 방법

  • FTS(Full Table Scan) : 테이블을 처음 부터 끝까지 검색하는 방법
  • Index Scan : 인덱스를 검색하여 해당 자료의 테이블을 액세스 하는 방법.