인덱스(Index) 는 테이블에서 자주 사용하는 컬럼의 값과 그 위치를 따로 저장해두는 구조입니다.
즉, 원본 테이블의 ‘검색용 사본’이라고 볼 수 있습니다.
인덱스가 없을 경우, DB는 데이터를 찾기 위해 테이블 전체를 처음부터 끝까지 탐색합니다.
이를 Full Scan이라고 하며, 데이터가 많을수록 검색 속도가 느려집니다.
반면 인덱스를 사용하면, 테이블 전체를 읽지 않고 필요한 데이터의 위치를 바로 찾아 빠르게 조회할 수 있습니다.
따라서 인덱스는 검색 성능 향상에 큰 도움을 줍니다.
검색 속도는 빨라지지만, 인덱스가 걸린 컬럼에 삽입(INSERT), 수정(UPDATE), 삭제(DELETE) 작업이 발생하면 DB는 원본 데이터뿐 아니라 인덱스 정보도 함께 갱신해야 합니다.
즉, 데이터 변경이 자주 일어나는 테이블에서는 오히려 성능이 저하될 수 있습니다.
따라서 인덱스는 조회가 많고 변경이 적은 컬럼에 사용하는 것이 효율적입니다.
여러 컬럼을 함께 검색해야 할 경우, 두 개 이상의 컬럼을 조합해 하나의 인덱스를 만들 수 있습니다.
이를 복합 인덱스(Composite Index) 라고 합니다.
카디널리티(Cardinality) 란 한 컬럼이 가진 고유 값의 개수를 의미합니다.
| 구분 | 설명 | 예시 |
|---|---|---|
| 카디널리티 높음 | 값의 중복이 적고, 고유 값이 많음 | 주민등록번호, 이메일, ID |
| 카디널리티 낮음 | 값의 중복이 많고, 고유 값이 적음 | 성별, 여부(Y/N), 지역 코드 |
| 인덱스 효율성 | 카디널리티가 높을수록 인덱스 효율이 좋음 | 고유 값이 많은 컬럼일수록 검색 분류 효율↑ |
| 주의사항 | 사용 빈도가 낮은 컬럼은 카디널리티가 높아도 인덱스 비추천 | 출판일, 등록일 등 |
• 중복이 적을수록(고유 값이 많을수록) 카디널리티가 높습니다.
• 카디널리티가 높은 컬럼일수록 인덱스 효율이 좋습니다.
하지만 단순히 카디널리티가 높다고 해서 무조건 인덱스를 걸 필요는 없습니다.
조회 빈도(활용도) 가 낮다면 인덱스를 걸어도 성능 개선 효과가 없습니다.(ex 출판일)
| 항목 | 장점 | 단점 | 적합한 경우 |
|---|---|---|---|
| 인덱스 | 검색 속도 향상 | 데이터 변경 시 성능 저하 | 조회 위주 테이블 |
| 복합 인덱스 | 다중 컬럼 검색 최적화 | 인덱스 크기 증가 | WHERE 조건 컬럼이 2개 이상일 때 |
| 카디널리티 | 인덱스 효율 판단 기준 | 중복 많으면 효율 저하 | 고유 값이 많은 컬럼 우선 |