개발기초

데이터베이스에서 인덱스란? 왜 필요한가?

Veams 2023. 5. 10.

데이터베이스에서 인덱스(Index)란? 왜 필요 할까?

두꺼운 책의 맨 앞에 목차가 기재되어 있으면 내가 원하는 내용을 더 빨리 탐색할 수 있다. 반대로 목차가 없으면 두꺼운 책 내용 중에 어떤 내용을 어디에서 찾을지 모르기 때문에 전체를 다 탐색해야 한다. 시간과 에너지가 많이 든다. 

 

이 때문에 어떤 순서대로 정렬된 목록(색인)의 필요성을 느낀다. DB에서 이와 같은 기능을 하는 것이 인덱스이다.

- 즉, 인덱스는 데이터베이스에서 데이터를 빠르게 찾아낼 수 있도록 돕는 자료구조이다.

- 데이터를 찾기 위한 '색인'으로 데이터의 주소록이라고 부를 수 있다.

- 인덱스가 있으면 전체 Pull Scan 할 필요없다.

 

인덱스의 구성
- 인덱스는 (key)와
포인터들로 구성되어있다.

- DB에서 추출한 일부 데이터인 특정 데이터를 고유하게 식별하게 한다.

- 포인터는 키와 연관된 데이터가 저장된 실제 위치를 가르킨다.

출처 코딩애플

인덱스 동작 과정

인덱스 동작 과정

 

- (자주 사용되는 컬럼인) Name 컬럼에 인덱싱을 해놓은 예시

- 인덱스를 통해 Name을 먼저 조회하고, Name의 Location 값을 통해 테이블의 값을 조회한다.

 

장점 : 인덱스는 왜 필요한가? 

테이블 전체를 스캔하지 않을 수 있다 : 인덱스의 활용이 DB 성능 최적화에 큰 영향을 미친다.

--> 검색 속도 향상 : 인덱스는 데이터의 검색 속도를 향상시키기 위해 사용된다.

--> 쿼리 최적화 : 쿼리를 실행할 때 테이블 전체를 스캔하지 않고 인덱스를 사용해 빠르게 데이터를 찾을 수 있다.

데이터양이 많아질 수록 인덱스 스캔의 장점이 클 수 있습니다.

단점

- 관리 오버헤드(overhead) : 인덱스를 생성, 유지, 관리하는 데 시간과 공간이 소모 된다.

- 쓰기 성능 저하 : 인덱스 정보를 갱신하는데 비용이 추가됩니다. 다시 말해, 데이터를 삽입, 수정, 삭제할 때 인덱스도 함께 업데이트해야 하므로 쓰기 성능이 저하될 수 있다.

 

인덱스 사용 시 고려 사항

1) 높은 카디널리티(Cardinality) 고려하기

- 카디널리티가 높은 컬럼을 우선적으로 인덱싱 하는 것이 유리합니다. 카디널리티가 높으면 고유한 값이 많다는 것을 의미한다.

- 즉, 인덱스 특정 컬럼을 기준으로 중복도가 낮은 데이터(주민번호, 전화번호, 이메일 등)는 카디널리티가 높습니다. 이 경우 인덱스를 통해 행(row)를 빠르게 찾을 수 있다.

2) 쿼리에서 자주 사용되는 조건(WHERE 절, JOIN 조건, ORDER BY 절 등)에 해당하는 열에 인덱스를 고려한다.

3) 너무 많은 인덱스 생성하지 않기 : 인덱스가 많으면 오버헤드 증가 및 쓰기 성능 저하 될 수 있다.

 

 

참고, 데이터를 더 쉽게 찾도록 돕는 인덱스 구조

- 이진 탐색 트리(Binary Search Tree)

- B-Tree 인덱스: 가장 일반적으로 사용되는 인덱스

- B+Tree : B-Tree에서 발전된 형태

 

인덱스 유형

- 복합 인덱스 : 여러 컬럼을 한꺼번에 인덱싱

- Full-Text 인덱스 : 전문 텍스트 검색을 도움

- 공간 인덱스 : 공간 데이터를 위함

 

 

 

https://kyungyeon.dev/posts/66

 

DB Index 동작원리를 알아보자

B+Tree를 통해 알아보는 Index 동작 원리

kyungyeon.dev

https://wildeveloperetrain.tistory.com/131

 

DB 데이터베이스 인덱스(Index) 기본 개념과 설명

1. 인덱스(Index)란? Index는 RDBMS(관계형 데이터베이스 관리 시스템)에서 테이블에 대한 검색 속도를 높여주는 자료 구조를 말하며, 테이블 내에 1개의 컬럼 혹은 여러 개의 컬럼을 이용하여 생성합

wildeveloperetrain.tistory.com

https://www.youtube.com/watch?v=iNvYsGKelYs 

 

댓글