10.3.8 key_len 열
쿼리에 사용된 다중 열(단일 포함) 열 인덱스에서 사용된 열 수(인덱스의 각 레코드에서 사용된 바이트 수)를 확인할 수 있습니다.
NULLABLE 열에 추가 1바이트가 추가됩니다.
10.3.9 참조 열
어떤 값이 동등 비교 조건으로 참조되는지 확인할 수 있습니다.
상수 값을 지정하면 const를 지정하고, 다른 테이블의 컬럼을 지정하면 해당 컬럼을 지정한다.
등식 비교 조건에 연산을 넣으면 func로 출력됩니다.
이 경우 MySQL 서버는 내부적으로 또는 명시적으로(쿼리에 작성된 경우) 함수를 실행하고 조건을 확인합니다.
가장 좋은 방법은 가능한 한 유형을 일치시키는 것입니다.
10.3.10 행 열
실행 계획에서 예측된 레코드 수를 표시합니다(쿼리를 처리하기 위해 읽고 확인해야 하는 레코드 수). 각 스토리지 엔진의 통계 정보를 기반으로 MySQL에서 예측한 값이므로 정확하지 않습니다.
행 = 테이블의 총 레코드 수인 경우 전체 스캔.
10.3.11 필터링된 열
필터링 후 남은 열의 백분율이 표시됩니다.
링크 성능은 필터링된 값이 얼마나 정확하게 예측되는지에 따라 달라집니다.
-> 히스토그램에 의한 보다 정확한 예측
10.3.12 추가 열
놀랍게도 성능에 중요한 정보가 종종 추가 열에 표시됩니다.
종종 내부 알고리즘에 대한 좀 더 깊이 있는 내용이 포함됩니다.
(1) 일정한 줄을 찾을 수 없음
문자 그대로 const로 읽으면 하나도 없습니다.
테스트 데이터 세트를 생성하고 실행 계획을 다시 실행해 보겠습니다.
(2) 모든 행 삭제
핸들러 함수 호출에서 모든 레코드를 삭제할 때 나타납니다.
(3) 확실히
DISTINCT가 표시되면 필요한 레코드만 읽어 조인하고 결과 테이블의 중복 레코드는 무시한다는 의미입니다.
(4) 첫 경기
FirstMatch semi-join 전략 사용(레코드가 조건을 충족하는 즉시 반환)
(5) ZERO 버튼 전체 스캔
열은 NULL이지만 전체 스캔을 의미합니다.
NULL이 아니라고 확신하는 경우 WHERE col IS NOT NULL 을 명시적으로 추가합니다.
IN 및 NOT IN의 피연산자가 NULL이 될 수 없으면 전체 스캔이 수행되지 않습니다.
(6) 불가능을 소유하다
HAVING 절의 조건을 만족하는 레코드가 없는 경우
(7) 불가능한 WO
WHERE 절의 조건을 만족하는 레코드가 없는 경우
(8) 느슨한 스캔
semi-join 전략에서 느슨한 스캔을 사용하는 경우
(9) 일치하는 최소/최대 라인 없음
MIN(), MAX() 설정 함수를 사용하는 쿼리에서 조건절에 일치하는 레코드가 없는 경우
(10) 상수 테이블에 일치하는 행이 없습니다.
상수 동등 제약 조건을 만족하는 레코드가 없는 경우
(11) 파티션 정리 후 일치하는 행 없음
분할된 테이블의 UPDATE 및 DELETE에 나타날 수 있습니다.
UPDATE 또는 DELETE 대상 레코드가 없는 경우
(12) 사용된 테이블 없음
쿼리에 FROM 절 또는 FROM 이중이 포함되지 않은 경우
(13) 사용할 수 없음
외부 조인을 사용하여 조인 방지를 수행하는 쿼리에 나타납니다.