-
[Mysql] 인덱스는 어떻게 동작할까?DB/Mysql 2025. 4. 17. 14:42728x90반응형
🔍 인덱스는 어떻게 작동하나요?
인덱스는 책의 목차처럼, 원하는 데이터를 더 빠르게 찾을 수 있도록 도와주는 역할을 합니다.
📘 예시
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반응형'DB > Mysql' 카테고리의 다른 글
[Mysql] 샤딩과 파티셔닝에 대해 알아보자! (0) 2025.04.22 [Mysql] slow query 발생 원인 및 해결 방안을 알아보자! (0) 2025.04.22 [Mysql] 트랜잭션과 ACID 이해하기! (0) 2025.04.15 [Mysql] 인덱스 생성 시 고려 사항 (테이블, 쿼리 예제) (0) 2025.04.15 외래키(FK) 의 제약조건에 대해 알아보자! (0) 2025.04.15