SQL

[DB Optimization#2] MySQL 구조

j.d 2025. 4. 16. 22:27

개발을 하다 보면 어느 순간부터 데이터베이스가 느려졌다는 이야기를 듣게 됩니다.
특히 서비스가 실제 사용자에게 제공되는 시점이 되면 SQL 응답 속도가 체감될 정도로 느려지는 현상을 마주하게 됩니다.
이럴 때 무작정 쿼리를 수정하기보다 먼저 해야 할 일은, MySQL 내부 구조를 이해하는 것입니다.

 

 

MySQL 구조를 왜 알아야 할까?

SQL이 어떻게 실행되고, 어떤 과정에서 성능 병목이 발생하는지 이해하지 못하면
문제의 원인을 파악하기도 어렵고, 제대로 된 튜닝도 할 수 없습니다.

MySQL의 구조를 이해하면 다음과 같은 질문에 답할 수 있습니다.

  • 어떤 단계에서 성능 저하가 발생하는가?
  • 어떤 요인이 병목을 유발하는가?
  • SQL 튜닝은 어떤 지점을 개선해야 하는가?

 

 

MySQL 아키텍처 개요

출처: https://distributedsystemsauthority.com/mysql-performance-tuning-part-1/

 

 

MySQL에서 하나의 SQL이 실행되는 과정을 간단히 요약하면 다음과 같습니다.

  1. 클라이언트가 SQL 요청을 보냅니다.
  2. 옵티마이저(Optimizer) 가 SQL을 분석하고 실행 계획을 수립합니다.
    테이블 접근 순서, 인덱스 사용 여부 등을 결정합니다.
    → 실행 계획이 항상 최적은 아니기 때문에 SQL 튜닝이 필요합니다.
  3. 스토리지 엔진(Storage Engine) 에서 데이터를 가져옵니다.
    → 대부분의 성능 병목은 이 단계에서 발생합니다.
    → 데이터를 찾기 어렵거나, 너무 많은 데이터를 가져오면 시간이 오래 걸립니다.
  4. MySQL 엔진이 정렬, 필터링 등의 후처리를 수행한 뒤 결과를 반환합니다.

 

 

SQL 튜닝의 핵심은 어디에 있을까?

SQL 튜닝의 핵심은 다음 두 가지에 집중합니다.

  1. 스토리지 엔진에서 데이터를 더 쉽게 찾을 수 있도록 만들기
  2. 스토리지 엔진에서 가져오는 데이터의 양을 줄이기

이 두 가지를 해결하면 쿼리 성능은 대부분 크게 개선됩니다.

 

 

대표적인 해결 방법: 인덱스

가장 일반적이고 효과적인 해결책은 인덱스(index) 를 활용하는 것입니다.

  • 인덱스는 원하는 데이터를 빠르게 탐색할 수 있도록 도와주는 구조입니다.
  • 책의 목차와 비슷한 개념으로, 전체 데이터를 일일이 훑지 않아도 필요한 부분만 빠르게 찾을 수 있게 해줍니다.

단, 인덱스를 단순히 추가한다고 해서 성능이 무조건 좋아지는 것은 아닙니다.
잘못된 인덱스는 오히려 성능을 떨어뜨릴 수 있으므로 '적절하게' 사용하는 것이 중요합니다.

 

 

다음 글에서는 인덱스란 무엇인지,
그리고 어떤 경우에 인덱스를 사용해야 하는지 구체적으로 알아보겠습니다.

'SQL' 카테고리의 다른 글

[DB Optimization#4] Primary Key  (0) 2025.04.17
[DB Optimization#3] 인덱스(Index)란?  (0) 2025.04.16
[DB Optimization#1] DB 성능 최적화란?  (0) 2025.04.16
[SQL#12] UNION / UNION ALL  (0) 2025.04.16
[SQL#11] JOIN  (0) 2025.04.16