[SQL] MySQL 인덱스
인덱스
특정 컬럼들에 대한 목차를 만들어, 검색 시 속도를 단축시킬 수 있다. 추가, 수정, 삭제시에는 더 많은 시간 소모된다.
- 인덱스 생성
ALTER TABLE [SCHEMA].[TABLE]
ADD INDEX [INDEX_NAME] (COLUMN);
-- 다중 컬럼 인덱스
ALTER TABLE [TABLE]
ADD INDEX [INDEX_NAME] (COLUMN1, COLUMN2);
- 인덱스 조회
SHOW INDEX FROM [TABLE];
- 인덱스 삭제
ALTER TABLE [TABLE]
DROP INDEX [INDEX_NAME];
인덱스를 사용하기 적합한 곳
- 데이터의 변경이 많지 않은 테이블
- WHERE, ORDER BY에 자주 사용되는 컬럼
- JOIN에 사용되는 컬럼
- Cardinality가 높은 컬럼 = 중복도가 낮은 컬럼(B-Tree)
- 성별: 부적합, 이름: 적합
인덱스의 종류
- B-Tree 인덱스
- 기본 인덱스
- Cardinality가 높은 컬럼에 적합
- Full-Text 인덱스
ALTER TABLE [TABLE] ADD FULLTEXT INDEX [INDEX_NAME] (COLUMN);
- 다수의 단어 등을 포함하는 컬럼에서 단어 및 구문을 검색하기 위함
- 데이터를 일정 단위로 분할하여 인덱싱
-
- InnoDB, MyISM에서만 사용 가능
-
DB 엔진
- CHAR, VARCHAR, TEXT 컬럼에만 가능