DB/Mysql
[Mysql] 인덱스는 어떻게 동작할까?
hoonylab
2025. 4. 17. 14:42
728x90
반응형
🔍 인덱스는 어떻게 작동하나요?
인덱스는 책의 목차처럼, 원하는 데이터를 더 빠르게 찾을 수 있도록 도와주는 역할을 합니다.
📘 예시
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(100),
age INT
);
-- email 컬럼에 인덱스를 생성
CREATE INDEX idx_email ON users(email);
-- email을 조건으로 검색
SELECT * FROM users WHERE email = 'test@example.com';
이 경우, MySQL은 전체 테이블을 스캔하지 않고 인덱스를 먼저 탐색해 해당 데이터를 빠르게 찾습니다.
🚫 어떤 경우에 인덱스를 사용하지 않는 것이 좋을까요?
모든 상황에서 인덱스가 유리한 것은 아닙니다. 오히려 성능을 떨어뜨릴 수 있는 경우도 있습니다.
✅ 1. 데이터 양이 아주 적은 테이블
SELECT * FROM settings WHERE name = 'site_title';
데이터가 10건 정도인 소형 테이블이라면, 인덱스를 사용하는 것보다 풀스캔이 더 빠를 수 있습니다.
✅ 2. 자주 변경되는 컬럼
UPDATE posts SET views = views + 1 WHERE id = 1001;
views
처럼 자주 업데이트되는 컬럼에 인덱스가 있다면, 인덱스도 함께 갱신되어 성능에 부하가 생깁니다.
✅ 3. WHERE절에 함수나 계산식이 포함된 경우
SELECT * FROM users WHERE YEAR(birthdate) = 1990; -- ❌ 인덱스 사용 못 함
함수나 계산식이 들어가면 인덱스가 무시됩니다.
대안:
SELECT * FROM users WHERE birthdate BETWEEN '1990-01-01' AND '1990-12-31';
✅ 4. 와일드카드 검색에서 앞에 %가 있는 경우
SELECT * FROM users WHERE email LIKE '%gmail.com'; -- ❌ 인덱스 사용 못 함
와일드카드가 앞에 있으면 인덱스를 사용할 수 없습니다.
대안:
SELECT * FROM users WHERE email LIKE 'john%'; -- ✅ 인덱스 사용 가능
💡 정리
상황 | 인덱스 사용 O | 인덱스 사용 X |
---|---|---|
데이터 검색 성능 향상 | ✅ | |
소량 데이터 조회 | ✅ | |
자주 갱신되는 컬럼 | ✅ | |
WHERE에서 컬럼 그대로 비교 | ✅ | |
WHERE에서 함수/연산 사용 | ✅ | |
LIKE에서 앞에 % 없음 | ✅ | |
LIKE에서 앞에 % 있음 | ✅ |
TIP: 인덱스를 만들기 전에는 항상 EXPLAIN
으로 실행 계획을 확인해보는 습관이 중요해요!
728x90
반응형