데이터베이스 인덱스(index)는 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블에 저장된 데이터의 검색 속도를 향상시키기 위한 자료구조이다.
인덱스는 데이터베이스 내의 특정 컬럼(열)이나 컬럼들의 조합에 대한 값과 해당 값이 저장된 레코드(행)의 위치를 매핑하여 데이터베이스 쿼리의 성능을 최적화하는 데 중요한 역할을 한다.
예를 들어, 책에서 원하는 내용을 찾는다고 가정하면, 책의 모든 페이지를 넘기면서 원하는 내용이 나올 때까지 찾는 것보다 목차 또는 저자가 남긴 색인(index)을 통해 찾는 것이 더욱 빠를 것이다. 데이터베이스의 인덱스가 책의 목차와 색인과 같은 역할을 한다.
이처럼 데이터베이스에서 인덱스를 사용하면, 데이터를 검색할 때 전체 테이블을 스캔하는 것이 아니라, 인덱스를 사용하여 검색 대상 레코드의 범위를 줄일 수 있다. 이는 대량의 데이터를 다루는 경우 데이터 검색 속도를 크게 향상시킨다.
인덱스는 여러 자료구조를 이용해서 구현하 수 있는데, 대표적인 자료구조로 해시 테이블과 B+Tree가 있다.
장점:
검색과 정렬 속도 향상: 데이터가 정렬되어 있어 빠르게 원하는 데이터를 찾아낼 수 있습니다.
조건 검색 효율성: Where절을 사용할 때 데이터를 빠르게 찾을 수 있습니다.
정렬 정의 효율성: Order by에 의한 정렬 과정이 필요 없어 처리 속도가 빨라집니다.
MIN, MAX 처리의 효율성: 데이터가 정렬되어 있어 빠르게 최소, 최대값을 찾을 수 있습니다.
테이블 행의 고유성 강화: 데이터의 중복을 방지하여 데이터의 일관성을 유지합니다.
시스템 부하 감소: 전반적인 데이터베이스 시스템의 효율성을 향상시킵니다.
단점:
유지 관리 부하: 데이터 변경 작업(INSERT, UPDATE, DELETE)이 발생할 때마다 인덱스를 재정렬해야 합니다.
스토리지 비용: 인덱스를 유지 관리하기 위해 추가적인 저장 공간이 필요합니다.
인덱스 스캔의 한계: 모든 경우에 인덱스 스캔이 효율적인 것은 아닙니다. 데이터 양에 따라 풀 스캔이 더 빠를 수 있습니다.
과도한 인덱스 사용의 부작용: 인덱스를 너무 많이 사용하면 하나의 쿼리는 빨라질 수 있지만, 전체 데이터베이스 성능에 부정적인 영향을 줄 수 있습니다.
출처 : https://ittrue.tistory.com/331,
https://velog.io/@alicesykim95/DB-%EC%9D%B8%EB%8D%B1%EC%8A%A4Index%EB%9E%80