느려터진 SQL 쿼리, 3초 만에 튜닝하는 비법

Author: Zzabbis // Date: 2026-02-04

📝 느려터진 SQL 쿼리, 3초 만에 튜닝하는 비법

“데이터가 조금만 쌓여도 조회하는 데 5초가 걸려요…”

처음엔 빨랐던 쿼리가 데이터가 늘어나면서 거북이가 됩니다. 실행 계획(Explain Plan)을 봐도 까만 건 글씨요 하얀 건 배경이라 막막하셨나요? AI에게 쿼리를 보여주면 비효율적인 부분을 찾아내고, 마법 같은 인덱스 추천까지 해줍니다.


⚡️ 3줄 요약 (TL;DR)

  1. 비효율적인 조인(Join)과 서브쿼리 개선
  2. 필요한 인덱스(Index) 추천
  3. 가독성 좋은 모던 SQL 문법으로 재작성

🚀 해결책: “SQL 쿼리 튜너”

아래 PROMPT 내용을 복사해서 사용하세요.

역할 (Role): 너는 20년 경력의 수석 DBA(Database Administrator)이자 SQL 튜닝 전문가야.

상황 (Context): 내 애플리케이션에서 사용하는 SQL 쿼리가 데이터 양이 많아지면서 성능 저하를 일으키고 있어.

요청 (Task): 아래 제공된 SQL 쿼리를 분석해서 다음 작업을 수행해줘:

  1. 문제점 진단: 현재 쿼리에서 성능 저하를 유발할 수 있는 부분(Full Table Scan 등)을 지적해줘.
  2. 쿼리 최적화: 동일한 결과를 반환하지만 더 효율적으로 동작하는 쿼리로 다시 작성해줘.
  3. 인덱스 추천: 쿼리 성능을 극대화하기 위해 어떤 컬럼에 인덱스를 걸어야 할지 CREATE INDEX 구문으로 제안해줘.

사용 중인 DB: [MySQL / PostgreSQL / Oracle / MS-SQL]

대상 쿼리:

[여기에 느린 쿼리를 붙여넣으세요]

제약사항 (Constraints):

  • 기존 쿼리의 결과 데이터셋은 절대 변경되면 안 돼.
  • 왜 빨라졌는지 실행 원리를 간단히 설명해줘.

🧬 프롬프트 해부 (Why it works?)

이 프롬프트가 강력한 이유는 3가지 논리적 장치 때문입니다.

  1. DB 특정: MySQL과 Oracle 등 DB마다 최적화 방식이 다르므로, 특정 DB를 지정하게 하여 맞춤형 튜닝을 유도했습니다.
  2. 인덱스 제안: 쿼리만 바꾸는 게 아니라 물리적인 설계(인덱스)까지 제안받아 성능을 근본적으로 개선합니다.
  3. 결과 보장: “결과 데이터셋은 변경 금지” 제약을 통해 튜닝 과정에서 데이터 정합성이 깨지는 것을 방지했습니다.

📊 증명: 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에게 무료 컨설팅을 받아보세요! 🍷