미스터 역마살
My sql 실행 계획 (2/2) 본문
728x90
반응형
확장된 실행 계획
다음은 확장된 실행계획을 알아보자
EXPLAIN FORMAT = TRADITIONAL
기본적인 실행계획은 EXPLAIN 키워드로 입력하며 기본 포맷은 TRADITIONAL이다. 따라서 명시하지 않아도 다음과 같이 기본적인 실행계획 정보가 출력됨
EXPLAIN FORMAT = TRADITIONAL
SELECT *
FROM 사원
WHERE 사원번호 BETWEEN 100001 AND 200000;
* 결과
+----+-------------+-------+------------+-------+---------------+---------+---------+------+-------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+-------+---------------+---------+---------+------+-------+----------+-------------+
| 1 | SIMPLE | 사원 | NULL | range | PRIMARY | PRIMARY | 4 | NULL | 20080 | 100.00 | Using where |
+----+-------------+-------+------------+-------+---------------+---------+---------+------+-------+----------+-------------+
1 row in set, 1 warning (0.01 sec)
EXPLAIN FORMAT = TREE
트리 형태로 보여줌
EXPLAIN FORMAT = TREE
SELECT *
FROM 사원
WHERE 사원번호 BETWEEN 100001 AND 200000;
* 결과
+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
| EXPLAIN |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
| -> Filter: (`사원`.`사원번호` between 100001 and 200000) (cost=4036.17 rows=20080) |
| -> Index range scan on 사원 using PRIMARY (cost=4036.17 rows=20080) |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
EXPLAIN FORMAT = JSON
형식값에 JSON 옵션을 입력하면 JSON 형태로 추가된 실행계획 항목을 확인 할 수 있음
EXPLAIN FORMAT = JSON
SELECT *
FROM 사원
WHERE 사원번호 BETWEEN 100001 AND 200000;
{
"query_block": {
"select_id": 1,
"cost_info": {
"query_cost": "4036.54"
},
"table": {
"table_name": "사원",
"access_type": "range",
"possible_keys": [
"PRIMARY"
],
"key": "PRIMARY",
"used_key_parts": [
"사원번호"
],
"key_length": "4",
"rows_examined_per_scan": 20080,
"rows_produced_per_join": 20080,
"filtered": "100.00",
"cost_info": {
"read_cost": "2028.54",
"eval_cost": "2008.00",
"prefix_cost": "4036.54",
"data_read_per_join": "1M"
},
"used_columns": [
"사원번호",
"생년월일",
"이름",
"성",
"성별",
"입사일자"
],
"attached_condition": "(`tuning`.`사원`.`사원번호` between 100001 and 200000)"
}
}
EXPLAIN ANALYZE
- 그동안 출력된 실행계획은 예측된 값이며 실제 측정한 실행계획은 ANALYZE 키워드를 사용하면 됨
- 실제 수행된 소요시간과 비용을 측정하여 실측 실행 계획과 예측 실행 계획을 모두 확인 하려면 EXPLAIN ANALYZE키워드를 활용하면됨
- Mysql 8.0.18 이상 버전에서 사용 가능함
EXPLAIN ANALYZE
SELECT *
FROM 사원
WHERE 사원번호 BETWEEN 100001 AND 200000;
* 결과
+-------------------------------------------------------------------------------------------------------------------------------------+
| EXPLAIN |
+-------------------------------------------------------------------------------------------------------------------------------------+
| -> Filter: (`사원`.`사원번호` between 100001 and 200000) (cost=4036.54 rows=20080) (actual time=0.082..8.311 rows=10025 loops=1)
-> Index range scan on 사원 using PRIMARY (cost=4036.54 rows=20080) (actual time=0.079..7.389 rows=10025 loops=1) |
+-------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)
728x90
'Database > MYSQL' 카테고리의 다른 글
Mysql 쿼리 힌트 (0) | 2022.08.09 |
---|---|
Mysql 프로파일링 (0) | 2022.08.08 |
My SQL 실행 계획 (1/2) (0) | 2022.08.08 |
Mysql Audit Log (0) | 2022.08.03 |
Mysql 모니터링 스크립트 (0) | 2022.08.01 |
Comments