MySQL EXPLAIN
란?
EXPLAIN
은 MySQL에서 제공하는 명령어로, SQL 쿼리가 어떻게 실행될지에 대한 계획을 확인하는 데 사용됩니다. 특히 쿼리의 성능 최적화에 있어서 중요한 도구로 사용됩니다.
EXPLAIN
을 사용하면 다음과 같은 정보를 얻을 수 있습니다:
- 어떤 테이블들이 쿼리에 참여하는지
- 각 테이블을 어떤 순서로 스캔하는지
- 어떤 인덱스들이 사용되는지
- 얼마나 많은 행이 각 단계에서 처리되는지
주요 항목의 설명:
- id: 쿼리의 순서나 단계를 나타냅니다.
- select_type: 쿼리의 종류입니다 (예: SIMPLE, SUBQUERY, UNION).
- table: 현재 단계에서 참조되는 테이블 이름.
- type: 조인 타입 (예: ALL, INDEX, RANGE, REF, EQ_REF, CONST, NULL).
- possible_keys: 쿼리에서 고려될 수 있는 인덱스들.
- key: 실제로 사용된 인덱스.
- key_len: 사용된 인덱스의 길이.
- ref: 조인에 사용된 열이나 상수.
- rows: 추정 스캔 행 수.
- Extra: 추가적인 정보.
예시 시나리오:
우리는 users
테이블과 orders
테이블이 있습니다. 각 사용자는 여러 주문을 할 수 있습니다. 우리는 특정 사용자의 주문을 조회하려 합니다.
-- users 테이블
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL
);
-- orders 테이블
CREATE TABLE orders (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT NOT NULL,
item_name VARCHAR(255) NOT NULL,
FOREIGN KEY (user_id) REFERENCES users(id)
);
-- 인덱스 추가
CREATE INDEX idx_user_id ON orders(user_id);
쿼리 최적화를 위해 EXPLAIN
을 활용하여 쿼리를 분석하려 합니다.
EXPLAIN SELECT * FROM users u
JOIN orders o ON u.id = o.user_id
WHERE u.id = 1;
위의 EXPLAIN
결과로 나온 출력은 우리에게 어떤 인덱스가 사용되었는지, 얼마나 많은 행이 스캔되었는지 등의 정보를 제공할 것입니다.
EXPLAIN
을 사용하면 쿼리의 성능 문제점을 진단하고, 해당 문제점을 해결하기 위한 방법을 찾아내는 데 큰 도움을 받을 수 있습니다. 느린 쿼리를 발견했을 때, EXPLAIN
을 사용하여 그 원인을 파악하고, 필요한 인덱스를 추가하거나 쿼리를 재작성함으로써 성능을 개선하는 작업은 데이터베이스 관리의 중요한 부분입니다.
728x90
'데이터베이스' 카테고리의 다른 글
재귀적 쿼리에 대한 이해 (1) | 2023.09.20 |
---|---|
MySQL `EXPLAIN`의 조인 타입(`type` 컬럼) 깊게 이해하기 (0) | 2023.09.12 |
복합키란 무엇인가? (1) | 2023.09.06 |
ERD 설계의 중요성과 핵심 요소 (0) | 2023.09.05 |
정규화와 정규형 (0) | 2023.07.25 |