ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Mysql] 인덱스는 어떻게 동작할까?
    DB/Mysql 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
    반응형

    댓글

Designed by Tistory.