DB 데이터/인덱스 & 성능 최적화

쿼리 성능 분석 및 실행 계획 (EXPLAIN)

backend.log 2025. 5. 12. 18:00
728x90
반응형

📘 3-2. 쿼리 성능 분석 및 실행 계획 (EXPLAIN)

쿼리 성능 분석은 데이터베이스 최적화의 중요한 과정 중 하나입니다. MySQL에서 쿼리 성능을 분석하는 도구 중 하나는 바로 EXPLAIN 명령어입니다. 이 명령어는 쿼리가 실행되는 방식을 보여주며, 이를 통해 성능을 개선할 수 있는 방법을 찾아낼 수 있습니다.

📌 EXPLAIN 명령어란?

EXPLAIN은 MySQL 쿼리의 실행 계획을 보여주는 명령어입니다. 쿼리를 실행하기 전에 실행 계획을 미리 확인할 수 있어, 쿼리가 어떻게 실행될지, 어떤 인덱스를 사용할지, 조인 순서 등 중요한 정보를 알 수 있습니다. 이 정보를 바탕으로 성능을 최적화할 수 있습니다.

📌 EXPLAIN 명령어 기본 사용법

EXPLAIN은 쿼리 앞에 붙여서 사용합니다. 예를 들어, 아래와 같이 사용합니다:

EXPLAIN SELECT * FROM users WHERE email = 'test@example.com';

위 쿼리를 실행하면, MySQL은 쿼리가 어떻게 실행될지를 설명하는 실행 계획을 반환합니다. 반환되는 정보는 쿼리 성능 분석에 유용한 여러 가지 항목을 포함하고 있습니다.

📌 EXPLAIN 결과의 주요 항목

EXPLAIN 명령어를 실행하면 다음과 같은 정보가 포함된 결과가 반환됩니다:

항목 설명
id 쿼리의 각 단계에 대한 식별자. 여러 쿼리가 있을 경우 단계별로 구분됩니다.
select_type 쿼리의 유형을 나타냅니다. (단순 SELECT, 서브쿼리 등)
table 쿼리에서 접근하는 테이블의 이름.
type 조인 방법을 나타냅니다. (예: ALL, index, range 등)
possible_keys 쿼리가 실행될 때 사용 가능한 인덱스 목록.
key 실제로 사용된 인덱스.
key_len 사용된 인덱스의 길이 (바이트 단위).
ref 조인된 테이블의 열 또는 상수 값.
rows 예상되는 행의 수. 쿼리가 실행될 때 조회할 예상 행 수.
Extra 쿼리 실행 시 추가적인 정보 (예: "Using where", "Using index" 등).

📌 EXPLAIN 결과 해석

EXPLAIN 명령어의 결과를 해석하는 것은 쿼리 성능 최적화의 첫 번째 단계입니다. 아래는 각 항목에 대한 해석 방법입니다:

1. id

쿼리의 각 단계에 대한 고유한 식별자입니다. 서브쿼리가 있으면 서브쿼리마다 고유한 id를 가집니다. 일반적으로 id가 낮을수록 먼저 실행되는 단계입니다.

2. select_type

쿼리의 유형을 나타냅니다. 예를 들어:

  • SIMPLE: 단일 SELECT 쿼리
  • PRIMARY: 가장 바깥쪽의 쿼리 (서브쿼리가 포함된 경우)
  • SUBQUERY: 서브쿼리

3. type

쿼리에서 사용하는 조인 방법을 나타냅니다. type은 성능 최적화에 있어 매우 중요한 지표입니다. 가능한 값은 다음과 같습니다:

  • ALL: 전체 테이블을 스캔 (비효율적)
  • index: 인덱스를 사용한 스캔 (전체 테이블이 아니라 인덱스를 스캔)
  • range: 인덱스 범위 검색
  • ref: 인덱스에서 한 번만 검색
728x90
반응형