본문 바로가기
MySQL

1.MySQL 성능 최적화에 대해,인덱스 개념

by shulk 2025. 3. 11.

1. DB 성능 개선 방법과 SQL 튜닝의 중요성

DB 성능이 저하될 때, 이를 개선하는 방법은 다양하다. 대표적인 해결책으로는 다음과 같은 방법이 있다.

  1. SQL 튜닝 – 비효율적인 SQL을 최적화
  2. 캐싱 서버 활용 – Redis 등 캐시를 사용하여 DB 부하 감소
  3. 레플리케이션 (Master-Slave 구조) – 읽기 부하를 여러 서버로 분산
  4. 샤딩 (Sharding) – 데이터를 여러 DB에 나눠서 저장하여 부하 분산
  5. 스케일업 – CPU, 메모리, SSD 등의 하드웨어 업그레이드

이처럼 여러 가지 방법이 있지만, SQL 튜닝을 가장 먼저 고려해야 하는 이유는 다음과 같다.

2. SQL 튜닝을 우선 고려해야 하는 이유

  1. 추가적인 시스템 구축 없이 즉시 적용 가능
    •   캐싱 서버나 레플리케이션, 샤딩 등을 도입하면 추가적인 인프라 비용과 서버 관리 부담이 발생한다.
    •   반면 SQL 튜닝은 기존 시스템을 변경하지 않고도 성능 개선이 가능하다.
  2. 비효율적인 SQL을 그대로 두면 시스템적인 성능 개선에도 한계가 있음
    •   잘못 작성된 SQL이 많다면 아무리 하드웨어를 업그레이드해도 성능이 한계에 부딪힌다.
    •   따라서 SQL 튜닝을 통해 DB 엔진이 데이터를 더 효율적으로 찾고 가져올 수 있도록 최적화하는 것이 필수적이다.

 

3. MySQL의 아키텍처와 SQL 실행 과정

SQL 튜닝이 중요한 이유를 이해하려면 MySQL이 SQL을 처리하는 과정을 알아야 한다.

  1. 옵티마이저 (Optimizer)
    •  MySQL 엔진에는 옵티마이저(Optimizer) 라는 것이 있다.
    •  옵티마이저는 SQL을 분석한 후, 데이터를 효율적으로 가져오기 위한 실행 계획을 세운다.
      •   어떤 순서로 테이블에 접근할지?
      •   어떤 인덱스를 사용할지?
    •   하지만 옵티마이저가 항상 최적의 실행 계획을 세우는 것은 아니기 때문에 SQL 튜닝이 필요하다.
  2. 스토리지 엔진 (Storage Engine)에서 데이터 가져오기
    •  옵티마이저가 세운 계획을 바탕으로 스토리지 엔진에서 데이터를 조회한다.
    •  DB 성능 문제는 대부분 이 단계에서 발생한다.
      •   인덱스가 없거나 비효율적인 경우 → 데이터를 찾기가 어려움
      •   너무 많은 데이터를 불러와야 하는 경우 → 쿼리 성능 저하
    •  SQL 튜닝은 스토리지 엔진이 데이터를 더 쉽게 찾고, 불필요한 데이터를 조회하지 않도록 최적화하는 작업이다.
  3. MySQL 엔진에서 추가 처리 후 결과 반환
    •  스토리지 엔진이 데이터를 가져오면, MySQL 엔진에서 정렬, 필터링 등의 추가 처리를 한 후 클라이언트에 반환한다.

 

4. 인덱스(Index)란?

인덱스는 데이터를 빠르게 찾기 위해 특정 컬럼을 기준으로 미리 정렬해 놓은 표이다.
즉, 데이터베이스에서 검색 속도를 향상시키기 위해 사용하는 구조다.

인덱스가 필요한 이유

예를 들어 users 테이블에 아래와 같은 컬럼이 있다고 가정하자.

 

이제 나이가 23살인 모든 사용자를 찾는다고 가정해 보자.

  • 나이가 섞여 있는 상태에서는 PK 1번부터 10000번까지 하나씩 검사해야 하므로 속도가 느려진다.
  • 하지만 "나이"를 기준으로 정렬된 표(인덱스) 가 있다면?

  • 23살이 시작되는 지점과 24살이 시작되는 지점만 찾으면 그 사이에 있는 데이터만 가져오면 된다.
  • 즉, 모든 데이터를 일일이 확인할 필요 없이 빠르게 조회할 수 있다.

이렇게 미리 정렬된 구조를 활용하여 빠르게 조회할 수 있도록 도와주는 것이 인덱스이다.

 

인덱스는 실제 데이터와 다르다

  • 인덱스를 생성한다고 해서 실제 테이블이 정렬되는 것은 아니다.
  • DB 내부적으로 별도의 구조(B-tree 등)로 인덱스를 관리하며, 사용자가 직접 볼 수 없고 시스템 내부적으로 생성될 뿐이다. 

 

 

'MySQL' 카테고리의 다른 글

5. SQL문 튜닝 연습-(2)  (0) 2025.03.18
4. SQL문 튜닝 연습-(1)  (0) 2025.03.17
3. 실행계획(EXPLAIN)  (0) 2025.03.17
2.인덱스 실전,멀티컬럼 인덱스 개념,실전  (0) 2025.03.12