[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];

인덱스를 사용하기 적합한 곳

  1. 데이터의 변경이 많지 않은 테이블
  2. WHERE, ORDER BY에 자주 사용되는 컬럼
  3. JOIN에 사용되는 컬럼
  4. Cardinality가 높은 컬럼 = 중복도가 낮은 컬럼(B-Tree)
    • 성별: 부적합, 이름: 적합

인덱스의 종류

  1. B-Tree 인덱스
    • 기본 인덱스
    • Cardinality가 높은 컬럼에 적합
  2. Full-Text 인덱스
     ALTER TABLE [TABLE]
     ADD FULLTEXT INDEX [INDEX_NAME] (COLUMN);
    
    • 다수의 단어 등을 포함하는 컬럼에서 단어 및 구문을 검색하기 위함
    • 데이터를 일정 단위로 분할하여 인덱싱
    • InnoDB, MyISM에서만 사용 가능

      DB 엔진

    • CHAR, VARCHAR, TEXT 컬럼에만 가능