본문 바로가기
개발 · IT/백엔드

MySQL 쿼리 최적화 방법 10가지

by 플라퉁 2025. 11. 18.
반응형

MySQL 쿼리 최적화 방법 10가지

sql 썸네일 이미지

 

실무에서 답도없는 쿼리들 보면 정말 짜증이 치밀어 오르고 전 실무자에게 전화를 걸고 싶어져요...

MySQL 성능 문제는 대부분 쿼리 비효율에서 시작됩니다.

화를 삭이며 이번 글에서는 실무에서 바로 적용할 수 있는 10가지 최적화 방법을 정리했습니다.

 

한눈에 요약
  1. 인덱스(Index) 활용
  2. EXPLAIN로 실행 계획 확인
  3. SELECT * 피하기
  4. JOIN 최적화
  5. 서브쿼리 대신 JOIN 사용
  6. LIMIT 사용으로 불필요한 데이터 제한
  7. WHERE 조건 순서 및 함수 사용 최적화
  8. 정규화·비정규화 적절히 활용
  9. 배치 처리와 트랜잭션 관리
  10.  쿼리 캐시 및 MySQL 설정 튜닝

 

1. 인덱스(Index) 활용

검색 조건(WHERE, JOIN, ORDER BY)에 사용되는 컬럼에는 인덱스를 걸어 조회 속도를 높일 수 있죠.

하지만 이미 많은 데이터가 있는 테이블에 인덱스 추가는 무리 일 수 있어요. 

기존 테이블에 인덱스 추가는 신중해야 합니다.

CREATE INDEX idx_user_email ON users(email);

주의: 인덱스가 많으면 쓰기(INSERT/UPDATE) 성능에 영향.

 

2. EXPLAIN으로 실행 계획 확인

쿼리 성능을 분석할 때는 EXPLAIN을 활용하여 인덱스 사용 여부, 테이블 스캔 여부 등을 확인합니다.

EXPLAIN SELECT * FROM orders WHERE user_id = 100;

 

3. SELECT * 피하기

아스타로 조회는 가급적 피하는 이유 아시죠?? 유지보수 할 때 무서워서 컬럼 추가를 못해요... 그리고 필요한 컬럼만 조회하면 네트워크, 메모리, 디스크 I/O를 절약할 수 있습니다. 여러모로 코딩할 때 아스타는 쓰지 맙시다...

SELECT id, name, email FROM users WHERE status='active';

 

4. JOIN 최적화

JOIN 시 작은 테이블 → 큰 테이블 순으로, 인덱스가 걸린 컬럼을 사용하여 성능을 높입니다.

 

5. 서브쿼리 대신 JOIN 사용

서브쿼리는 성능이 떨어질 수 있으므로 가능하면 JOIN으로 대체합니다.

또한 쿼리에 함수 굳이 안써도 되면 쓰지 맙시다...

-- 서브쿼리
SELECT name FROM users WHERE id IN (SELECT user_id FROM orders);

-- JOIN
SELECT u.name FROM users u JOIN orders o ON u.id = o.user_id;

 

6. LIMIT 사용

조회 결과가 많을 때, 페이지네이션 등으로 LIMIT를 활용하면 불필요한 데이터를 줄일 수 있습니다.

SELECT id, name FROM users ORDER BY created_at DESC LIMIT 50;

 

7. WHERE 조건 최적화

컬럼에 함수를 적용하면 인덱스가 무효화될 수 있으므로 주의합니다.

이거 핵심이에요... 인덱스가 없어도 쓸데없는 함수 사용 시 쿼리 지옥으로 가는 거에요.

-- 비효율
WHERE DATE(created_at) = '2025-11-18'

-- 효율적
WHERE created_at >= '2025-11-18 00:00:00' AND created_at < '2025-11-19 00:00:00'

 

8. 정규화/비정규화 적절히 활용

조인 과부하가 많다면, 일부 데이터를 비정규화하여 조회 속도를 높이는 것도 고려할 수 있습니다.

처음 설계할때 잘좀 합시다!

 

9. 배치 처리 및 트랜잭션 관리

대량 INSERT/UPDATE는 한 번에 처리하지 말고 배치 처리하거나 트랜잭션을 나누어 잠금과 로그 부담을 줄입니다.

 

10. 쿼리 캐시 및 MySQL 설정 튜닝

MySQL 설정(max_connections, query_cache_size, innodb_buffer_pool_size 등)을 조정하면 반복 조회 성능이 향상됩니다.

 

마무리

MySQL 쿼리 최적화는 단순한 기술보다 전체 설계·인덱스·실행 계획·데이터 패턴을 종합적으로 고려해야 합니다.

위 10가지 방법을 체크리스트로 활용하면 실무에서 성능 향상을 빠르게 확인할 수 있습니다.

사실 첨부터 잘 설계하는게 베스트지만 어쩔 수 있나요? 다 뒤집고 다시 시작하는게 최고라지만

대표는 그렇게 생각 못하니까유...

반응형

댓글