| Version 1 (modified by , 4 weeks ago) ( diff ) |
|---|
ANALYZE
EXPLAIN 명령과 비슷하나, 실제로 SQL문을 실행해서 EXPLAIN의 결과(Query Optimizer)와 비교까지 해준다.
mysql 클라이언트로 결과를 볼 때는 \G 를 붙여서 세로로 출력하는 게 보기 편하다.
MariaDB> ANALYZE select * from t1\G
결과값의 주요 항목은 다음과 같다.
| 항목 | 설명 |
| rows | 테이블에서 읽을 것으로 예상한 데이터 숫자. where 조건을 충족하는지 아닌지 알아보기 위해 읽은 데이터도 포함한다. |
| r_rows | 테이블에서 실제로 읽은 데이터 숫자. Null인 경우엔 아예 테이블에서 데이터를 읽지 않았음을 의미한다. where 조건을 충족하는지 아닌지 알아보기 위해 읽은 데이터도 포함한다. |
| filtered | 읽을 데이터 중 where 조건을 만족하는 데이터의 비율 예측. 100%라면 읽은 데이터를 모두 레코드셋으로 반환할 것이라는 뜻. |
| r_filtered | 읽은 데이터 중 where 조건을 만족하는 데이터의 실제 비율. Null인 경우엔 아예 테이블에서 데이터를 읽지 않았음을 의미한다. 일반적으로 fullscan이 있고 이 값이 15 % 미만이라면 인덱스 추가를 고려해야 한다. |
| type | 테이블에서 데이터를 찾는 방법 |
| possible_keys | 테이블에서 사용할 수 있는 인덱스 |
| key | 데이터를 불러올 때 사용한 인덱스. Null이라면 어떤 인덱스도 사용하지 않음을 의미. |
| key_len | 사용한 인덱스의 바이트 수. 복합 키에서 일부만 사용했는지를 보여준다. |
| ref | 참조키 |
| Extra | 추가 정보 |
Type 컬럼에 대한 설명
| 항목 | 설명 |
| All | 인덱스를 사용하지 않음. full table scan. BAD! |
| const | 테이블에 일치할 수 있는 데이터가 하나 뿐. |
| range | 인덱스의 범위값으로 데이터를 불러옴 |
| index | 인덱스에 대한 full scan. 인덱스가 크고 join되어 있다면 All 보다는 낫지만 여전히 문제가 있다. |
Extra 컬럼에 대한 설명
| 항목 | 설명 |
| Using where | 인덱스 검색 외에 추가적으로 where 조건을 검색함. |
ANALYZE FORMAT=JSON
다음과 같이 FORMAT=JSON 옵션으로 ANALYZE 명령을 실행하면 좀더 자세한 정보를 얻을 수 있다.
ANALYZE FORMAT=JSON select * from t1;
- r_loops: 각 노드가 몇 번 실행되었는지.
- r_total_time_ms: 각 노드를 실행하는 데 걸린 시간. (하위 노드 실행 시간까지 포함)
- r_buffer_size: 사용한 버퍼의 크기
예
+------+-------------+-------------------+-------+-------------------------------------------------+-------------------------+---------+------+---------+-----------+----------+------------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | r_rows | filtered | r_filtered | Extra | +------+-------------+-------------------+-------+-------------------------------------------------+-------------------------+---------+------+---------+-----------+----------+------------+-------------+ | 1 | SIMPLE | switch_trans_json | range | x_ie2_switch_trans_json,x_ie1_switch_trans_json | x_ie1_switch_trans_json | 91 | NULL | 1769914 | 924143.00 | 100.00 | 8.26 | Using where | +------+-------------+-------------------+-------+-------------------------------------------------+-------------------------+---------+------+---------+-----------+----------+------------+-------------+
- x_ie1_switch_trans_json 인덱스를 사용했다.
- Query Optimizer는 1,769,914 행을 읽을 것으로 예측했으나 실제로는 924,143행을 읽었고(예측한 것의 약 52%),
- Query Optimizer는 1,769,914 행 중 where 조건을 만족하는 행을 예측하지 못해서 100%로 간주했으나 실제로는 8.26%의 행이 where 조건을 만족했다.
Note:
See TracWiki
for help on using the wiki.
