Database

[MySQL] EXPAIN, ANALYZE

dev_minpark 2024. 8. 22. 11:12

1. EXPAIN

  • 쿼리 실행 계획을 보여주는 명령어 어떤 방식으로 쿼리를 실행할 것인지 계획을 보여준다.
  • 쿼리의 성능 병목을 파악하고, 인덱스 사용 여부, 조인 방식, 테이블 액세스 방법 등을 확인할 수 있다.
  • 주요 필드
타입 설명
id 쿼리 내에서 SELECT 문이 실행되는 순서
select_type 쿼리의 유형 (SIMPLE, PRIMARY, SUBQUERY)
table 액세스되는 테이블명
type 테이블에 액세스하는 방식 (ALL, index, range, ref, eq_ref, const, system)
possible_keys 쿼리에서 사용 가능한 인덱스
key 실제로 사용된 인덱스
key_len 사용된 인덱스 키 길이
ref 인덱스에서 어떤 컬림이 비교되는지
rows 추정 SELECT 행 수 
Extra 추가 정보 (Using index, Using where, Using temporary, Using filesort)

2. ANALYZE

  • 실제 쿼리를 실행하면서 쿼리 계획과 함께 실제 수행된 실행 정보를 보여줌
  • 실제 실행 시간을 포함한 세부 정보 제공
  • EXPLAIN 과 달리 실제로 쿼리를 실행해 결과를 반환
  • 성능 문제를 더 정확하게 파악 가능
EXPLAIN ANALYZE SELECT * FROM employees WHERE department_id = 10;

#result
-> Filter: (employees.department_id = 10)  (cost=0.30 rows=2) (actual time=0.003..0.005 rows=2 loops=1)
    -> Index scan on employees using dept_id (cost=0.20 rows=2) (actual time=0.002..0.004 rows=2 loops=1)
  • Filter : where 절 조건이 필터로 적용되었음을 나타냄
  • cost=0.30 rows=2 : EXPLAIN 이 예측한 비용과 결과의 예상 로우를 나타냄
  • actual time=0.003..0.005 rows=2 loops=1 : 실제 실행된 쿼리의 시간과 실제 반환된 행 수, 쿼리 반복 횟수를 나타냄
  • Index scan on employees using dept_id : 쿼리에서 사용한 인덱스를 나타냄

'Database' 카테고리의 다른 글

[ChromaDB] ChromaDB 사용해보기  (2) 2024.10.11