| name | mysql-tuning-skill |
| description | MySQL 쿼리 성능 튜닝 및 최적화 스킬. MySQL 쿼리가 느린 경우, 실행계획(EXPLAIN) 분석, 인덱스 설계/최적화, 조인 튜닝, 서브쿼리 변환, 파티션 적용, 슬로우 쿼리 분석, Lock/트랜잭션 문제 해결 등 모든 MySQL 성능 관련 작업에 사용한다. "쿼리가 느려요", "EXPLAIN 결과 해석", "인덱스를 어떻게 잡아야 하나", "풀스캔이 발생해요", "조인 순서 최적화", "대용량 테이블 튜닝", "DB 성능 개선", "MySQL 최적화" 등의 요청에 반드시 이 스킬을 사용할 것. |
MySQL 성능 튜닝 스킬
개요
이 스킬은 MySQL 쿼리 성능 문제를 진단하고 해결하는 데 필요한 레퍼런스를 제공한다. 사용자의 요청에 따라 아래 레퍼런스 파일 중 필요한 것만 선택적으로 읽어서 활용한다.
레퍼런스 파일 구조
| 파일 | 내용 | 이런 경우 읽을 것 |
|---|
reference/01-explain.md | EXPLAIN 실행계획 읽는 법 | 실행계획 해석, type/Extra 의미 질문, EXPLAIN 결과 분석 요청 |
reference/02-index.md | 인덱스 원리 및 설계 | 인덱스 생성/최적화, 커버링 인덱스, 복합 인덱스 순서, 선택도/카디널리티 |
reference/03-query-patterns.md | 실전 쿼리 튜닝 패턴 | 좌변 함수 제거, OR→IN 변환, 스칼라→JOIN, 페이징, 대량 DML 등 구체적 SQL 최적화 |
reference/04-join.md | 조인 전략 및 순서 최적화 | 조인이 느린 경우, 드라이빙 테이블, Hash Join, STRAIGHT_JOIN |
reference/05-transaction-lock.md | 트랜잭션/Lock/동시성 | Lock 대기, Deadlock, 격리 수준, MVCC, Gap Lock |
reference/06-config-monitoring.md | 시스템 설정 및 모니터링 | 슬로우 쿼리 로그, 통계 갱신, buffer pool, 시스템 변수 튜닝 |
reference/07-checklist.md | 튜닝 체크리스트 | 종합 진단, 어디서부터 시작할지 모를 때, 전체 점검 |
사용 흐름
- 사용자의 요청을 파악한다
- 관련된 레퍼런스 파일을
view 도구로 읽는다 (여러 파일이 필요하면 복수 로드)
- 레퍼런스의 내용을 바탕으로 구체적인 진단과 해결책을 제시한다
핵심 원칙
이 원칙들은 모든 레퍼런스에 공통으로 적용된다:
- EXPLAIN 먼저: 튜닝은 항상 실행계획 확인에서 시작한다
- 인덱스 컬럼을 가공하지 말 것: 좌변(컬럼)에 함수/연산을 적용하면 인덱스를 탈 수 없다. 우변(비교값)을 가공하라
- 작은 결과집합을 드라이빙 테이블로: 조인 시 결과 건수가 적은 쪽을 먼저 읽어야 한다
- 커버링 인덱스 우선: 데이터 파일 접근 없이 인덱스만으로 결과를 반환할 수 있으면 최선이다
- 통계 정보를 최신으로: 옵티마이저는 통계 기반으로 판단하므로 대량 DML 후에는
ANALYZE TABLE 실행
빠른 진단 가이드
사용자가 "쿼리가 느려요" 혹은 "쿼리 개선해줘" 라고 말하면, 이 순서로 진단한다:
1. EXPLAIN으로 실행계획 확인 → 01-explain.md
- type=ALL이면 → 02-index.md (인덱스 확인)
- Using temporary/filesort → 03-query-patterns.md (쿼리 패턴 확인)
2. 인덱스가 있는데도 안 타면 → 03-query-patterns.md
- 좌변 함수? 암묵적 형변환? LIKE '%...'?
3. 조인이 느리면 → 04-join.md
- 드라이빙 테이블 순서? 드리븐 테이블에 인덱스?
4. 쿼리 자체는 빠른데 느리면 → 05-transaction-lock.md
- Lock 대기? 트랜잭션이 길어진 건 아닌지?
5. 전반적 느림 → 06-config-monitoring.md
- buffer pool 크기? 슬로우 쿼리 로그 분석?