인덱스(index, 색인)
- 데이터를 쉽고 빠르게 찾을 수 있도록하는 자료 구조
- 빠른 검색, 효율적인 레코드 접근 가능 (
WHERE 절에 인덱스 컬럼을 사용할 때)
- key-value(실제 값이 아닌 주소 값)로 이루어져 있으며 B-tree 형태의 구조
- 하나 혹은 여러 개의 컬럼에 대해 설정 가능
- 인덱스를 많이 설정한다고 해서 검색 속도가 향상되는 것은 아님
- DB 메모리를 사용하므로, 조회 시 자주 사용되고 고유한 값 위주로 설정하는 것이 좋음
인덱스 설정 기준
| 기준 | 정도 |
|---|
| 카디널리티(전체 튜플의 개수) | 높을수록 적합 |
| 선택도 | 낮을 수록 적합 |
| 활용도 | 높을 수록 적합 |
| 중복도 | 낮을수록 적합 |
생성하기
create index [인덱스 이름] on [테이블 이름] (칼럼명1, ...);
확인하기
show index from [테이블 이름];
삭제하기
drop index [인덱스 이름] on [테이블 이름];
추가 개념들
종류
1) 클러스터 인덱스
- 기본키 지정 시, 기본키에 대한 클러스터 인덱스 생성
- 기본키 미지정 시, 먼저 나오는 unique 속성 이용
- 기본키, unique 속성 X, MySQL의 자체 행번호 이용
2) 보조 인덱스
- 클러스터가 아닌 모든 인덱스
- 각 레코드는 보조 인덱스 속성과 기본키 속성값 지님
- 기본키 속성값을 찾은 후, 클러스터 인덱스에서 해당 레코드 찾음
인덱스 타는지 확인하는 방법
explain [쿼리문];
- type: ALL -> 인덱스 안 탐
- type: range, index -> 인덱스 탐