728x90
인덱스란?
인덱스(index)는 데이터베이스 테이블에서 원하는 데이터를 빠르게 찾기 위한 데이터 구조다.
책의 맨 앞에 있는 목차를 보면 어디어 어떤 내용이 나오는지 나오듯이, 인덱스 역시 전체 데이터를 다 뒤지지않고 바르게 접근할 수 있게 도와준다.
인덱스의 종류
인덱스 종류 | 설명 | 특징 | 예시 |
기본 키 인덱스(Primary Key Index ) |
기본 키를 설정하면 자동으로 생성됨 | 중복 ❌, NULL ❌ | 테이블에서 무조건 하나만 존재 CREATE TABLE user (id INT PRIMARY KEY, name VARCHAR(50)); |
고유 키 인덱스(Unique Index ) |
중복이 없는 값을 위한 인덱스 | 중복 ❌, NULL ✅ (단, 여러 개 가능) | CREATE UNIQUE INDEX idx_email ON users (email); |
일반 인덱스(Secondary Index ) |
중복이 가능한 컬럼에 사용 | 중복 ✅, NULL ✅ WHERE 절 자주 사용 시 유리 |
CREATE INDEX idx_name ON emp(name); |
복합 인덱스(Composite Index ) |
여러 열을 묶어서 인덱스를 생성 | 열 순서 중요 카디널리티 높은 열 먼저 | CREATE INDEX idx_multi ON orders (user_id, order_date); |
전문 검색 인덱스(Full-text Index ) |
긴 텍스트(설명, 본문 등)를 빠르게 검색 | LIKE '%단어%' 보다 빠름 | CREATE FULLTEXT INDEX idx_desc ON products(description); |
인덱스는 왜 여러 종류일까?
다양한 검색 조건에 대응하기 위해서는 여러 종류의 인덱스가 필요하기 때문이다.
WHERE user_id = 1
→ 정확한 값 검색WHERE email = 'abc@example.com'
→ 고유 값 검색WHERE name LIKE 'A%'
→ 패턴 검색WHERE salary > 3000
→ 범위 검색WHERE MATCH(content) AGAINST ('MySQL')
→ 자연어 텍스트 검색
위와 같이 검색 조건의 방식이 달라진다면 인덱스를 만드는 방법도 달라져야 한다.
인덱스 종류 | 최적화 대상 | 용도 예시 |
기본 키 인덱스 | 기본키 검색 | user_id = 1 |
고유 인덱스 | 중복 방지 + 빠른 조회 | email = 'a@a.com' |
일반 인덱스 | 자주 검색되는 필드 | name = 'Tom', status = 'active' |
복합 인덱스 | 다중 조건 | WHERE name = 'Tom' AND age = 30 |
전문 검색 인덱스 | 자연어 검색 | 게시글 내용에 '마케팅' 포함 여부 |
이처럼 검색 조건의 방식이 달라지면 필요로하는 인덱스의 종류도 다양해지기 때문에 인덱스가 다양한 종류를 가진다.
인덱스 사용시 주의사항
인덱스를 많이 만들수록 쓰기(INSERT
, UPDATE
, DELTE
) 성능은 느려진다.
인덱스를 잘못 선택한다면 사용하지 않을때보다 성능이 하락한다.
- 낮은 카디널리티의 컬럼에 인덱스를 만드는 경우
- 성별이나 Y / N 같은 경우가 이에 해당함
인덱스가 있더라도 항상 사용되는것은 아니다.
- 옵티마이저가 판단했을때, 인덱스를 사용한다면 더 느리다고 판단되면 무시한다.
728x90
'DB' 카테고리의 다른 글
[DB] MySQL - 사용자 및 권한 관리 (0) | 2025.04.08 |
---|---|
[DB] MySQL - EXPLAIN 사용해보기 (0) | 2025.04.07 |
[DB] MySQL - 프로시저 제어문 정리 (0) | 2025.04.07 |
[DB] MySQL - 프로시저 & 함수 개념 정리 (0) | 2025.04.07 |
[DB] SQL - VIEW의 제약 조건 및 고급 옵션 활용 (0) | 2025.04.04 |