SQL 인덱스는 조회 성능을 높여주는 강력한 도구입니다.
그래서 많은 분들이 이렇게 생각하곤 합니다.
"그럼 자주 사용할 만한 컬럼엔 전부 인덱스를 걸면 되는 거 아냐?"
하지만 현실은 다릅니다.
인덱스는 조회 성능을 높여주는 대신, 쓰기 작업(삽입, 수정, 삭제) 성능을 떨어뜨립니다.
인덱스가 많아지면 성능이 왜 느려질까?
인덱스를 생성한다는 것은 단순히 "검색이 빨라진다"는 의미가 아닙니다.
인덱스를 위한 내부 자료 구조(B-tree)가 함께 관리되기 때문에, 데이터를 삽입하거나 수정할 때마다 MySQL은 원본 테이블뿐만 아니라 인덱스 테이블까지 함께 갱신해야 합니다.
즉, 인덱스의 개수가 많을수록 쓰기 작업 시 처리해야 할 작업량도 늘어나게 되는 것입니다.
실제로 인덱스가 없는 테이블과 인덱스가 많은 테이블 간 데이터 10만 건 삽입 성능을 비교해보았을 때,
아래와 같이 유의미한 차이가 존재했습니다.
→ 조회는 빨라지지만, 쓰기(삽입, 수정, 삭제) 성능은 반비례한다.
따라서, 조회 성능이 중요하다고 해서 모든 컬럼에 인덱스를 무작정 추가하는 것은 오히려 전체 시스템 성능을 악화시킬 수 있기 때문에 꼭 필요한 컬럼에만 인덱스를 설정하는 것이 중요합니다.
'SQL' 카테고리의 다른 글
[DB Optimization#8] 커버링 인덱스(Covering Index)란? (0) | 2025.04.17 |
---|---|
[DB Optimization#7] 멀티 컬럼 인덱스(Multiple-Column Index)란? (0) | 2025.04.17 |
[DB Optimization#5] UNIQUE (0) | 2025.04.17 |
[DB Optimization#4] Primary Key (0) | 2025.04.17 |
[DB Optimization#3] 인덱스(Index)란? (0) | 2025.04.16 |