인덱스는 데이터베이스 테이블에서 원하는 데이터를 더 빠르게 찾기 위해 사용하는 자료구조야.
BRIN, GIN은 MySQL에서 지원하지 않고 Partial B-Tree도 거의 사용되지 않음 👉 MySQL에서 거의 모든 경우 B-Tree 기반 인덱스 사용
인덱스 종류 | B-Tree 기반? | 설명 | 언제 사용하나? |
---|---|---|---|
PRIMARY KEY | ✅ Yes (B-Tree) | MySQL의 클러스터형 인덱스 (InnoDB 기준) | |
UNIQUE INDEX | ✅ Yes (B-Tree) | 중복 방지용 B-Tree 인덱스 | 1. 중복 방지용 인덱스. 하나의 컬럼 또는 컬럼 조합이 **유일해야 할 때 |
2.** 이메일, 주민번호, 닉네임처럼 중복되면 안 되는 값을 저장할 때 | |||
INDEX (일반 인덱스) | ✅ Yes (B-Tree) | 가장 기본적인 B-Tree 인덱스 | 1. 중복 허용. 단순히 검색, 정렬, JOIN 속도를 높이기 위한 인덱스 |
ORDER BY
, GROUP BY
대상이 자주 되는 컬럼WHERE A = ? AND B = ?
처럼 두 컬럼 이상을 함께 자주 검색할 때 |
| FULLTEXT INDEX | ❌ No (B-Tree 아님) | 역 인덱스 (Inverted Index) 구조 | 1. 문자열 전문 검색에 특화된 인덱스. LIKE '%키워드%'
보다 훨씬 빠름조건 | 설명 |
---|---|
WHERE 절 자주 사용 | 예: SELECT * FROM users WHERE email = '[email protected]' |
JOIN의 ON절 | 두 테이블을 자주 조인하는 컬럼에 인덱스를 설정해야 빨라져 |
ORDER BY / GROUP BY | 정렬이나 그룹핑에 자주 쓰이는 컬럼도 인덱스 대상이야 |
검색 속도 느림 | 조회할 때 느린 쿼리에 인덱스를 추가해서 성능 개선 가능 |
CREATE INDEX idx_user_email ON users(email);
CREATE UNIQUE INDEX idx_user_email_unique ON users(email);
CREATE INDEX idx_user_name_email ON users(name, email
WHERE name = ? AND email = ? 같은 복합 조건에서 성능 향상