본문 바로가기

Database

[Database] 인덱스의 개념, 장단점

 인덱스는 데이터베이스 테이블에 대한 검색 성능의 속도를 높여주는 자료 구조입니다. 

개념

 인덱스는 위 사진에서 볼 수 있듯이 Table의 1개 혹은 여러개의 컬럼을 Key로 삼고, 해당 Key의 물리적인 주소값을 저장해 둡니다. 흔히 인덱스를 책의 색인과 비유하곤 하는데 우리가 책의 내용중 특정 내용을 찾기위해 책 전체 내용을 보는것은 비효율 적입니다. 그래서 맨뒤 혹은 맨 앞에 저자들이 색인을 추가해 주는데 데이터베이스의 색인 기능이  바로 Index입니다.

 

장점

  • 인덱스는 데이터의 주소값을 갖고 있다.
  • 주소값을 통해 원하는 값을 빠르게 찾을 수 있다.
  • 시스템의 부하를 줄일 수 있다.

단점

  • 정렬된 상태의 유지. -> INSERT, UPDATE, DELETE를 통해 데이터가 추가되거나 값이 바뀐다면 Index 테이블의 값들을 다시 정렬해야 합니다. 즉, 원본 테이블과 Index 테이블 두군데에 데이터 수정 작업이 필요합니다.
  • 인덱스 관리를 위한 자원 필요 -> 인덱스 테이블을 수정하고 관리할 인력과 시간이 필요합니다.
  • 추가적인 저장공간 사용 -> 인덱스 테이블을 만들어야 하기 때문에 10%~30%의 저장공간이 필요합니다.

 

인덱스를 사용하기 좋은 상황

  1. INSERT, UPDATE, DELETE가 자주 발생하지 않을때.
  2. JOIN / WHERE / ORDER BY를 자주 사용할때
  3. 혹은 데이터의 중복도가 낮은 컬럼 등이 있습니다.

인덱스를 생성할 때는 다음과 같은 사항들을 고려해야 합니다.

  1. 어떤 컬럼에 인덱스를 걸 것인가? 인덱스를 걸어서 빠른 검색을 하고자 하는 컬럼을 선택해야 합니다. 보통은 검색이 자주 일어나는 컬럼이나 조건절에서 자주 사용되는 컬럼에 인덱스를 걸어주는 것이 좋습니다.
  2. 어떤 종류의 인덱스를 사용할 것인가? B-Tree 인덱스는 가장 일반적으로 사용되는 인덱스로, 대부분의 DBMS에서 기본적으로 제공됩니다. 하지만 특정 상황에서는 다른 종류의 인덱스를 사용해야 할 수도 있습니다. 예를 들어, 텍스트 검색을 위해서는 Full-Text 인덱스를 사용하는 것이 더 효율적일 수 있습니다.
  3. 인덱스의 크기를 어떻게 설정할 것인가? 인덱스의 크기는 성능에 직접적인 영향을 미칩니다. 인덱스를 크게 설정하면 검색 속도가 빨라질 수 있지만, 인덱스의 생성 및 유지에 필요한 저장 공간이 증가하게 됩니다. 반대로 인덱스를 작게 설정하면 저장 공간은 적게 필요하지만 검색 속도가 느려질 수 있습니다. 따라서 인덱스의 크기를 설정할 때는 검색 속도와 저장 공간 사이에서 적절한 균형을 찾아야 합니다.
  4. 인덱스의 갱신 빈도를 고려해야 합니다. 인덱스는 검색 속도를 높이기 위해 사용되지만, 인덱스의 생성 및 갱신은 오버헤드가 발생합니다. 따라서 인덱스를 생성할 때는 검색 빈도와 함께 인덱스의 갱신 빈도도 고려해야 합니다. 예를 들어, 자주 갱신되는 컬럼에 인덱스를 걸어서 검색 속도를 높이는 것은 오히려 성능을 저하시킬 수 있습니다.

 

 

참고 자료

https://mangkyu.tistory.com/96

 

[Database] 인덱스(index)란?

1. 인덱스(Index)란? [ 인덱스(index)란? ] 인덱스란 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조이다. 만약 우리가 책에서 원하는 내

mangkyu.tistory.com

https://siahn95.tistory.com/entry/DB-%EC%9D%B8%EB%8D%B1%EC%8A%A4%EB%9E%80-1-%EA%B0%9C%EB%85%90-%EC%9E%A5%EB%8B%A8%EC%A0%90-%EC%93%B0%EB%8A%94-%EC%9D%B4%EC%9C%A0

 

[DB] 인덱스란? - (1) 개념, 장단점, 쓰는 이유

Index(이하 인덱스)는 DB를 다루다 보면 필연적으로 듣는 단어이다. 본격적으로 글에 들어가기 전에 인덱스에 대해 간단하게 설명하자면, DB 데이터 조회 성능 향상을 위해 사용한다. 대용량 데이

siahn95.tistory.com

 

'Database' 카테고리의 다른 글

SQL 기본(GROUP BY, HAVING, ORDER BY, JOIN)  (0) 2023.09.02
SQL 기본 (SELECT, WHERE)  (0) 2023.08.19
데이터 모델과 SQL  (0) 2023.08.19
SQL_데이터 모델링의 이해  (0) 2023.08.12
[MySQL] 인덱스 스캔 방식의 종류 및 특징  (0) 2023.03.28