느려터진 SQL 쿼리, 3초 만에 튜닝하는 비법
📝 느려터진 SQL 쿼리, 3초 만에 튜닝하는 비법
- 🎯 추천 대상: “쿼리가 왜 이렇게 느리지?” 고민하는 백엔드 개발자
- ⏱️ 소요 시간: 실행계획 분석 30분 → 1분 단축
- 🤖 추천 모델: 모든 대화형 AI (ChatGPT, Claude, Gemini 등)
“데이터가 조금만 쌓여도 조회하는 데 5초가 걸려요…”
처음엔 빨랐던 쿼리가 데이터가 늘어나면서 거북이가 됩니다. 실행 계획(Explain Plan)을 봐도 까만 건 글씨요 하얀 건 배경이라 막막하셨나요? AI에게 쿼리를 보여주면 비효율적인 부분을 찾아내고, 마법 같은 인덱스 추천까지 해줍니다.
⚡️ 3줄 요약 (TL;DR)
- 비효율적인 조인(Join)과 서브쿼리 개선
- 필요한 인덱스(Index) 추천
- 가독성 좋은 모던 SQL 문법으로 재작성
🚀 해결책: “SQL 쿼리 튜너”
아래 PROMPT 내용을 복사해서 사용하세요.
역할 (Role): 너는 20년 경력의 수석 DBA(Database Administrator)이자 SQL 튜닝 전문가야.
상황 (Context): 내 애플리케이션에서 사용하는 SQL 쿼리가 데이터 양이 많아지면서 성능 저하를 일으키고 있어.
요청 (Task): 아래 제공된 SQL 쿼리를 분석해서 다음 작업을 수행해줘:
- 문제점 진단: 현재 쿼리에서 성능 저하를 유발할 수 있는 부분(Full Table Scan 등)을 지적해줘.
- 쿼리 최적화: 동일한 결과를 반환하지만 더 효율적으로 동작하는 쿼리로 다시 작성해줘.
- 인덱스 추천: 쿼리 성능을 극대화하기 위해 어떤 컬럼에 인덱스를 걸어야 할지
CREATE INDEX구문으로 제안해줘.사용 중인 DB:
[MySQL / PostgreSQL / Oracle / MS-SQL]대상 쿼리:
[여기에 느린 쿼리를 붙여넣으세요]제약사항 (Constraints):
- 기존 쿼리의 결과 데이터셋은 절대 변경되면 안 돼.
- 왜 빨라졌는지 실행 원리를 간단히 설명해줘.
🧬 프롬프트 해부 (Why it works?)
이 프롬프트가 강력한 이유는 3가지 논리적 장치 때문입니다.
- DB 특정: MySQL과 Oracle 등 DB마다 최적화 방식이 다르므로, 특정 DB를 지정하게 하여 맞춤형 튜닝을 유도했습니다.
- 인덱스 제안: 쿼리만 바꾸는 게 아니라 물리적인 설계(인덱스)까지 제안받아 성능을 근본적으로 개선합니다.
- 결과 보장: “결과 데이터셋은 변경 금지” 제약을 통해 튜닝 과정에서 데이터 정합성이 깨지는 것을 방지했습니다.
📊 증명: Before & After
❌ Before (입력 쿼리)
SELECT * FROM users
WHERE id IN (SELECT user_id FROM orders WHERE price > 10000);문제점: 서브쿼리가 매 행마다 실행될 수 있음(Dependent Subquery).
✅ After (결과)
최적화된 쿼리 (JOIN 사용):
SELECT DISTINCT u.*
FROM users u
INNER JOIN orders o ON u.id = o.user_id
WHERE o.price > 10000;추천 인덱스:
CREATE INDEX idx_orders_price_userid ON orders(price, user_id);설명: 서브쿼리를 JOIN으로 변경하여 최적화하고, price로 필터링 후 user_id로 조인하도록 복합 인덱스를 생성했습니다.
🚨 트러블 슈팅 (안 될 땐 이렇게!)
Q. 테이블 스키마가 복잡해요.
A. 쿼리만 주지 말고 CREATE TABLE 구문도 함께 제공하면 훨씬 정확한 분석이 가능합니다.
Q. 쿼리는 못 바꾸고 인덱스만 추가하고 싶어요. A. 요청 사항에 “쿼리 변경 없이 인덱스 추가만으로 성능을 개선해줘” 라고 명시하세요.
🎯 결론
“튜닝은 예술이다”라는 말이 있지만, 이제는 AI의 도움을 받을 수 있는 ‘과학’입니다. 느린 쿼리 때문에 고통받지 말고, AI DBA에게 무료 컨설팅을 받아보세요! 🍷