본문 바로가기
MySQL

MySQL EXPLAIN ANALYZE

by 타마마임팩트_쫀 2019. 10. 2.

출처 : https://dev.mysql.com/doc/refman/8.0/en/explain.html

 

MySQL :: MySQL 8.0 Reference Manual :: 13.8.2 EXPLAIN Syntax

{EXPLAIN | DESCRIBE | DESC} tbl_name [col_name | wild] {EXPLAIN | DESCRIBE | DESC} [explain_type] {explainable_stmt | FOR CONNECTION connection_id} {EXPLAIN | DESCRIBE | DESC} ANALYZE select_statement explain_type: { FORMAT = format_name } format_name: { T

dev.mysql.com

MySQL 8.0.18에서는 EXPLAIN ANALYZE 쿼리를 실행하면 옵티마이저의 기대치가 실제 실행과 어떻게 일치 하는지에 대한 타이밍 및 추가 iterator-based 정보와 함께 쿼리를 실행하고 출력을 생성 합니다.
다음 정보가 제공됩니다.

- Estimated execution cost
- Estimated number of returned rows
- Time to return first row
- Time to return all rows (actual cost)
- Number of rows returned by the iterator
- Number of loops


조회 실행 정보는 TREE 노드가 반복자를 나타내는 출력 형식을 사용하여 표시됩니다 . 
EXPLAIN ANALYZE 항상 TREE 출력 형식을 사용하고 형식 지정자를 허용하지 않습니다. 
FOR CONNECTION 과 함께 사용할 수도 없습니다.

EXPLAIN ANALYZE 는 SELECT 명령문 만 사용할 수 있습니다 .

출력 예 :

mysql> EXPLAIN ANALYZE SELECT * FROM t1 JOIN t2 ON (t1.c1 = t2.c2)\G
*************************** 1. row ***************************
EXPLAIN: -> Inner hash join (t2.c2 = t1.c1)  (cost=4.70 rows=6) 
(actual time=0.032..0.035 rows=6 loops=1)
    -> Table scan on t2  (cost=0.06 rows=6) 
(actual time=0.003..0.005 rows=6 loops=1)
    -> Hash
        -> Table scan on t1  (cost=0.85 rows=6) 
(actual time=0.018..0.022 rows=6 loops=1)

mysql> EXPLAIN ANALYZE SELECT * FROM t3 WHERE i > 8\G
*************************** 1. row ***************************
EXPLAIN: -> Filter: (t3.i > 8)  (cost=1.75 rows=5) 
(actual time=0.019..0.021 rows=6 loops=1)
    -> Table scan on t3  (cost=1.75 rows=15) 
(actual time=0.017..0.019 rows=15 loops=1)

mysql> EXPLAIN ANALYZE SELECT * FROM t3 WHERE pk > 17\G
*************************** 1. row ***************************
EXPLAIN: -> Filter: (t3.pk > 17)  (cost=1.26 rows=5) 
(actual time=0.013..0.016 rows=5 loops=1)
    -> Index range scan on t3 using PRIMARY  (cost=1.26 rows=5) 
(actual time=0.012..0.014 rows=5 loops=1)


예제 출력에 사용 된 테이블은 다음에 표시된 명령문으로 작성되었습니다.

CREATE TABLE t1 (
    c1 INT(11) DEFAULT NULL,
    c2 INT(11) DEFAULT NULL
);

CREATE TABLE t2 (
    c1 INT(11) DEFAULT NULL,
    c2 INT(11) DEFAULT NULL
);

CREATE TABLE t3 (
    pk INT(11) NOT NULL PRIMARY KEY,
    i INT(11) DEFAULT NULL
);