[Real MySQL 8.0]

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) 사용할 수 없음

외부 조인을 사용하여 조인 방지를 수행하는 쿼리에 나타납니다.