본문 바로가기
MySQL

Explain Current Statement 실수로 대량 데이터 삭제 갱신 방지

by 윤슬새벽 2025. 6. 20.
반응형

✅ EXPLAIN CURRENT란?

MySQL Workbench의 기능 중 하나로:

현재 작성된 쿼리를 실행하지 않고, MySQL이 **어떻게 실행할 것인지 계획(Execution Plan)**을 보여주는 기능입니다.

▶️ 실행 방법:

  • 메뉴: Query → Explain Current Statement
  • 단축키: Ctrl + Alt + X

🔍 EXPLAIN과 EXPLAIN CURRENT의 차이

항목 EXPLAIN 문장 EXPLAIN CURRENT
사용 방식 EXPLAIN SELECT ... 직접 작성 쿼리 위에서 단축키 (Ctrl + Alt + X)
실행 여부 실행 안 함 (예측만 함) 실행 안 함 (Workbench 내장 도구)
결과 텍스트 테이블 시각적 실행 계획 (Visual Plan)
대상 명시된 쿼리 현재 커서가 위치한 쿼리
 

🧠 EXPLAIN CURRENT가 보여주는 주요 정보

항목 설명
type 조인 방식 (ALL, index, ref 등) — ALL이면 비효율
possible_keys 사용할 수 있는 인덱스
key 실제 사용된 인덱스
rows MySQL이 읽을 것으로 예측한 행 수
Extra Using where, Using index, Using filesort 등 중요 정보 포함
 

📌 예시

SELECT * FROM orders WHERE saleprice > 50000;

EXPLAIN CURRENT를 실행하면 다음과 같은 시각적 도식이 나올 수 있습니다:

  • Table: orders
  • Access type: range
  • Key used: index on saleprice
  • Rows: 10
  • Extra: Using where

이 경우는 인덱스가 잘 사용된 예 (성능 좋음)


✅ 색상으로 직관적 파악 (Workbench Visual Explain)

색상 의미
🔵 파란색 매우 최적화된 실행 경로
🟢 초록색 적절히 효율적인 실행
🟡 노란색 경고: 인덱스 미사용 가능
🔴 빨간색 매우 비효율적 (풀 테이블 스캔 등) — 튜닝 필요
 

📝 요약

항목 내용
이름 EXPLAIN CURRENT
위치 Workbench Query > Explain Current Statement 또는 Ctrl + Alt + X
역할 실행하지 않고 실행계획을 미리 보여줌
실무 팁 실행 전에 항상 EXPLAIN CURRENT로 풀 스캔/인덱스 사용 여부 체크
 

왜 EXPLAIN CURRENT를 사용해서 실행계획을 먼저 확인하느냐?
→ 이는 SQL 성능 관리의 핵심 원칙과 직결됩니다.

 

✅ EXPLAIN CURRENT로 먼저 확인하는 이유

1. ❌ 실수로 대량 데이터 삭제·갱신 방지

DELETE FROM orders;  -- 조건 없이 실행하면 재앙
  • 쿼리를 그냥 실행하면 수천/수만 건 삭제 가능
  • EXPLAIN CURRENT는 쿼리를 실행하지 않고도 어떤 테이블에 영향이 가는지 확인 가능
  • ▶️ 사전 안전검사 역할

2. 🧠 MySQL의 **실행 계획(Execution Plan)**을 예측해서 성능 문제 조기 발견

예시:

SELECT * FROM orders WHERE saleprice > 50000;
  • EXPLAIN CURRENT 결과:
    • type = ALL → Full Table Scan 발생
    • key = NULL → 인덱스 미사용
  • 이런 경우:
    • ▶️ saleprice에 인덱스 생성 검토
    • ▶️ LIMIT, WHERE, JOIN 조건 튜닝 필요

3. 🔍 인덱스가 제대로 사용되는지 검증

예시:

SELECT * FROM customer WHERE name = '김철수';
  • 만약 name에 인덱스가 없으면 type = ALL (성능 저하)
  • 인덱스가 있으면 type = ref 또는 const (빠름)
  • ▶️ EXPLAIN CURRENT로 미리 확인하고 인덱스 전략을 최적화 가능

4. ⚡ 실행 전에 쿼리의 비용(row 수, join 방식)을 시각적으로 예측 가능


항목 설명
rows 예상되는 스캔 대상 row 수
key 실제로 사용할 인덱스
Extra Using where, Using index, Using filesort 등 중요 힌트
 
  • ▶️ 실행 후 느리다고 후회하는 게 아니라, 실행 전에 느릴 것을 미리 감지

✅ 한 줄 정리

EXPLAIN CURRENT는 쿼리를 실행하지 않고도 그 쿼리가 데이터베이스에 어떤 영향을 주고, 얼마나 효율적으로 실행될지를 사전에 예측해주는 도구입니다.
성능 문제 예방 + 실수 방지라는 이중 효과!


🛠️ 실제 실무에서 활용하는 이유 요약

이유 효과
대용량 조작 전에 사전 점검 실수 방지 (DELETE, UPDATE, JOIN)
성능 튜닝 지표 제공 인덱스 사용 여부, 조인 방식 확인
비용 예측 rows, filtered, type 등을 통해 부담 파악
실행 계획 시각화 Workbench에서 색상 + 다이어그램으로 직관적 이해
 

반응형