인덱스의 종류
- 클러스터형 인덱스(Clustered Index) : 기본 키로 지정하면 자동으로 생성되며 테이블에 1개만 생성 가능
- 보조 인덱스(Secondary Index) : 고유키로 지정하면 자동 생성되며 여러 개를 만들수 있지만 자동 정렬되지 않음.
- 고유 인덱스(Unique Index) : 값이 중복되지 않는 인덱스
인덱스의 내부 작동 원리
- 균형 트리의 개념
- 노드(node): 균형 트리 구조에서 데이터가 저장되는 공간
- 노드라는 용어는 개념적인 설명에서 주로 나오는 용어이며, MySQL에서는 페이지(page)라고 부름
- 페이지는 최소한의 저장단위로, 16Kbyte 크기
- 균형트리는 데이터를 검색할때 좋은 성능을 발휘함
- 균형 트리의 페이지 분할
- 인덱스를 구성하면 데이터 변경 작업(INSERT, UPDATE, DELETE) 시 페이지 분할 작업이 발생하여 성능이 나빠짐
- 페이지 분할 : 새로운 페이지를 준비해서 데이터를 나누는 작업
인덱스 생성과 제거 문법
- 인덱스 생성 문법
- 테이블을 생성할 때 특정 열을 기본키, 고유 키로 설정하면 인덱스가 자동으로 생성
- Primary Key 문법을 사용하면 클러스터형 인덱스
- Unique 문법을 사용하면 보조 인덱스
- 그 외에 직접 인덱스 생성시 CREATE INDEX문
CREATE [UNIQUE] INDEX 인덱스_이름
ON 테이블_이름 (열_이름) [ASC | DESC]
- UNIQTE는 중복이 안 되는 고유 인덱스를 만그는 것이며, 생략하면 중복이 허용됨
- CREATE UNIQUE로 인덱스를 생성하려면 기존에 입력된 값들이 중복이 있으면 안됨
- 인덱스 제거 문법
DROP INDEX 인덱스_이름 ON 테이블_이름
- 기본 키, 고유 키로 자동 생성된 인덱스는 DROP INDEX로 제거 불가능
- 다만, ALTER TABLE 문으로 기본 키나 고유 키를 제거하면 자동으로 생성된 인덱스로 제거 가능