데이터베이스 속도가 느릴 때 "인덱스를 만들어야 한다"는 말을 많이 들어보셨나요?
왜 중요한지, 어떻게 동작하는지 몰랐는데 공부해보니 개념이 확실히 잡혀서 정리해봅니다.
인덱스(Index)는 데이터를 빠르게 찾기 위해 사용하는 데이터베이스의 자료구조입니다.
'Database' 단어 뜻을 찾을 때 처음부터 페이지를 넘겨가며 단어 하나씩 확인해야 함.
알파벳 순으로 정렬되어 있어 D로 시작하는 페이지로 바로 가서 빠르게 찾을 수 있음.
👉 인덱스는 DB에서 바로 '영어사전의 알파벳 순 정렬 기능' 같은 역할을 합니다.
인덱스는 내부적으로 B-Tree라는 자료구조로 만들어집니다.
id | name
----|-------
1 | Alice
2 | Charlie
3 | Bob
4 | David
5 | Eve
name 컬럼으로 인덱스를 생성합니다.
CREATE INDEX idx_user_name ON user(name);
이제 DB는 name 기준으로 정렬된 B-Tree를 만들어 빠르게 탐색할 수 있습니다.
SELECT * FROM user WHERE name = 'David';
인덱스가 없으면:
Alice → Charlie → Bob → David (최대 n번 확인, O(n))
인덱스가 있으면:
Charlie 기준 비교 → David가 오른쪽 → 오른쪽에서 찾음 (O(log n))
🚀 훨씬 빠르게 데이터를 가져올 수 있습니다.
➡️ 무작정 다 만들지 말고 '자주 검색하거나 정렬/조인에 쓰는 컬럼 위주로 만들 것'이 중요합니다.
CREATE INDEX idx_user_email ON user(email);
✅ 언제 사용?
CREATE INDEX idx_post_moim_created ON post(moim_id, created_at);
✅ 언제 사용?
⚠️ 주의: 컬럼 순서 중요!
moim_id + created_at으로 만들면:
WHERE moim_id = ? 검색 + ORDER BY created_at 정렬 시 성능 향상WHERE created_at = ? 단독으로는 인덱스 활용 불가CREATE UNIQUE INDEX idx_user_email ON user(email);
✅ 언제 사용?
유니크 인덱스를 사용하면:
검색 속도 개선 + 데이터 무결성(중복 방지) 두 가지 효과를 얻을 수 있습니다.
인덱스는 데이터베이스의 검색 속도를 비약적으로 높여주는 강력한 도구입니다.
그러나:
저도 공부하면서 인덱스를 처음엔 "그냥 만드는 거 아니야?"라고 생각했는데, 인덱스의 구조와 동작 방식, 장단점을 정확히 이해하고 나니 성능 최적화를 보는 눈이 생겼습니다.
여러분도 프로젝트 DB 성능 개선할 때 인덱스를 적절히 활용해 보세요! 🚀