13.8.2 EXPLAIN 구문
{EXPLAIN | DESCRIBE | DESC}tbl_name
[col_name
|wild
] {EXPLAIN | DESCRIBE | DESC} [explain_type
]explainable_stmt
explain_type
: { EXTENDED | PARTITIONS | FORMAT =format_name
}format_name
: { TRADITIONAL | JSON }explainable_stmt
: { SELECT statement | DELETE statement | INSERT statement | REPLACE statement | UPDATE statement }
DESCRIBE
문과 EXPLAIN
문은 동의어입니다. 사실, DESCRIBE
키워드가 테이블 구조에 대한 정보를 얻기 위해 더 자주 사용되는 반면, EXPLAIN
는 쿼리 실행 계획 (즉, MySQL이 쿼리를 어떻게 실행하는지 설명)을 취득 하는 데 사용됩니다. 다음의 설명에서는 DESCRIBE
및 EXPLAIN
키워드를 그런 용도에 따라 사용하지만, MySQL 파서는 이들을 완전히 동의어로 처리합니다.
테이블 구조에 대한 정보 검색
DESCRIBE
는 테이블의 컬럼에 대한 정보를 제공합니다.
mysql> DESCRIBE City;
+------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+----------+------+-----+---------+----------------+
| Id | int(11) | NO | PRI | NULL | auto_increment |
| Name | char(35) | NO | | | |
| Country | char(3) | NO | UNI | | |
| District | char(20) | YES | MUL | | |
| Population | int(11) | NO | | 0 | |
+------------+----------+------+-----+---------+----------------+
DESCRIBE
는 SHOW COLUMNS
의 바로 가기입니다. 이 문은 또한 뷰에 대한 정보도 표시합니다. SHOW COLUMNS
의 설명에서는 출력 컬럼에 대해 더 많은 정보가 제공됩니다. 섹션 13.7.5.6 "SHOW COLUMNS 구문" 을 참조하십시오.
기본적으로 DESCRIBE
는 그 테이블의 모든 컬럼에 대한 정보를 표시합니다. col_name
(지정된 경우) 해당 테이블의 컬럼의 이름입니다. 이 경우 문은 지정된 컬럼의 정보 만 표시합니다. wild
(지정된 경우)는 패턴 문자열입니다. 여기에는 SQL의 ' %
'와' _
'와일드 카드 문자를 포함 할 수 있습니다. 이 경우 문은 문자열과 일치하는 이름을 가지는 컬럼의 출력 만 표시합니다. 공백이나 다른 특수 문자가 포함되어 있지 않은 한,이 문자열을 따옴표로 묶을 필요가 없습니다.
DESCRIBE
문은 Oracle과의 호환성을 위해 제공되고 있습니다.
또한 SHOW CREATE TABLE
, SHOW TABLE STATUS
및 SHOW INDEX
문은 테이블에 대한 정보도 제공됩니다. 섹션 13.7.5 "SHOW 구문" 을 참조하십시오.
실행 계획에 대한 정보 검색
EXPLAIN
문은 MySQL이 문을 어떻게 실행하는지에 대한 정보를 제공합니다.
MySQL 5.6.3 현재
EXPLAIN
사용할 수있는 설명 가능한 문은SELECT
,DELETE
,INSERT
,REPLACE
및UPDATE
입니다. MySQL 5.6.3 이전에서는SELECT
가 유일한 설명 가능한 문입니다.설명 가능한 문에서
EXPLAIN
을 사용하면 MySQL은 최적화에서 문 실행 계획에 대한 정보를 표시합니다. 즉, MySQL은 테이블이 어떻게 어떤 순서로 결합되어 있는지에 대한 정보를 포함하여 문을 처리하는 방법을 설명합니다.EXPLAIN
을 사용하여 실행 계획 정보를 얻을 내용은 섹션 8.8.2 "EXPLAIN 출력 형식" 을 참조하십시오.EXPLAIN EXTENDED
를 사용하여 추가의 실행 계획 정보를 얻을 수 있습니다. 섹션 8.8.3 "EXPLAIN EXTENDED 출력 형식" 을 참조하십시오.EXPLAIN PARTITIONS
는 분할 된 테이블을 포함하는 쿼리의 조사에 도움이됩니다. 섹션 19.3.5 "파티션에 대한 정보를 얻기" 를 참조하십시오.MySQL 5.6.5의 시점에서는
FORMAT
옵션을 사용하여 출력 형식을 선택할 수 있습니다.TRADITIONAL
는 표 형식으로 출력을 표시합니다.FORMAT
옵션이 존재하지 않는 경우 이것이 기본값입니다.JSON
형식은 JSON 형식으로 정보를 표시합니다.FORMAT = JSON
을 사용하면 출력에는 확장 된 파티션 정보가 포함되어 있습니다.
EXPLAIN
에 의해 인덱스를 사용하여 행을 찾을 수 문이 빠르게 실행되도록 테이블에 인덱스를 추가할지 알 수 있습니다. 또한 EXPLAIN
을 사용하여 최적화가 테이블을 최적의 순서로 결합하고 있는지 여부를 확인 할 수 있습니다. SELECT
문에 테이블이 지정되는 순서에 대응하는 결합 순서를 사용하도록 최적화 팁을 제공하려면 문을 SELECT
뿐만 아니라 SELECT STRAIGHT_JOIN
로 시작합니다. ( 섹션 13.2.9 "SELECT 구문" 을 참조하십시오.)
인덱스가 사용되는 것이다 생각 타이밍에서 그들이 사용되지 않은 문제가있는 경우, ANALYZE TABLE
을 실행하여 Optimizer는 사용자 선택에 영향을 미칠 수있는 키의 중요도 등의 테이블 통계를 업데이트 합니다. 섹션 13.7.2.1 "ANALYZE TABLE 구문" 을 참조하십시오.