미스터 역마살

My sql 실행 계획 (2/2) 본문

Database/MYSQL

My sql 실행 계획 (2/2)

Mr. YeokMaSsal 2022. 8. 8. 20:44
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