Index(인덱스, 색인)
- 데이터베이스에서 검색 속도를 높이기 위해 사용되는 자료구조.
- 일반적으로 B-Tree(이진 트리) 구조를 사용하여 구현.
- 특정 컬럼에 대한 색인을 생성하여 해당 컬럼을 검색할 때 더 빠르게 검색할 수 있음.
- 주로 SELECT 쿼리의 WHERE 절에서 사용되며, WHERE 절에서 조건에 해당하는 레코드를 찾기 위해 모든 레코드를 스캔하는 것이 아니라, 인덱스를 통해 빠르게 찾을 수 있음.
장점
검색 속도 향상
데이터를 미리 정렬하여 저장하기 때문에 인덱스가 없는 경우에는 전체 데이터를 스캔해야 하지만, 인덱스를 사용하면 인덱스에 저장된 데이터만 검색하여 빠르게 결과를 가져올 수 있음.
데이터 정렬
데이터를 정렬된 상태로 유지하기 때문에 ORDER BY 구문과 같은 정렬 작업에서도 빠르게 결과를 가져올 수 있음.
중복 제거
중복된 값을 가지지 않기 때문에 중복 데이터를 제거하고 유일한 값을 저장할 때 유용. 인덱스를 사용하면 중복된 데이터를 검색하지 않아도 되므로 검색 속도 향상.
테이블 용량 절감
데이터를 미리 정렬하여 저장하기 때문에 테이블의 용량을 절감할 수 있음. 또한 테이블의 크기가 작아지면 디스크에서 데이터를 읽어오는 속도가 빨라져 검색 속도 향상.
데이터 일관성 유지
데이터베이스 내부에서 자동으로 유지되므로, 데이터 일관성 유지 가능. 데이터가 추가, 수정, 삭제되더라도 인덱스가 자동으로 갱신되므로 검색 결과가 일관성을 유지.
단점
생성에 필요한 추가 공간
테이블에 대한 인덱스를 생성하면 데이터를 미리 정렬하여 저장하기 때문에 추가적인 공간이 필요.
생성에 필요한 시간
테이블의 크기가 크고 인덱스를 생성할 컬럼이 많을수록 인덱스를 생성하는 시간이 증가.
업데이트 오버헤드
인덱스가 갱신되는데 필요한 추가적인 오버헤드 때문에 데이터 삽입, 수정, 삭제 작업이 느려짐.
낮은 선택도
선택도가 낮으면 인덱스를 사용해도 검색 결과를 반환하는 레코드 수가 많아져서 검색 속도가 느려질 수 있음.
지연 갱신
데이터 변경 시 해당 인덱스도 함께 갱신되지만, 이 과정에서 인덱스가 제대로 갱신되지 않을 경우 데이터 일관성 문제가 발생할 수 있음.