Extra 칼럼에 표시되는 메시지

출력된 문구의 의미

책너두 6기 44일차

백은빈, 이성욱의 Real MySQL 8.0 1권 p.458 ~ p.465

내용정리

10 실행계획

10.3 실행계획분석

10.3.12 Extra 칼럼

10.3.12.4 FirstMatch

FirstMatch 전략이 사용되면 출력된다.

10.3.12.5 Full scan on NULL key

SQL 표준에서는 NULL을 “알 수 없는 값”으로 정의하고 있으며, NULL에 대한 연산의 규칙까지 정의하고 있다. 연산을 수행하기 위해 이 조건은 다음과 같이 비교돼야 한다.

  • 서브쿼리가 1건이라도 결과 레코드를 가진다면 최종 비교 결과는 NULL
  • 서브쿼리가 1건도 결과 레코드를 가지지 않는다면 최종 비교 결과는 FALSE
10.3.12.6 Impossible HAVING

쿼리에 사용된 HAVING 절의 조건을 만족하는 레코드가 없을 때 실행 계획의 Extra칼럼에는 “Impossible HAVING” 키워드가 표시된다.

10.3.12.7 Impossible WHERE

위와 비슷하게, WHERE 조건이 항상 FALSE가 될 수밖에 없는 경우 “Impossible WHERE”가 표시된다.

10.3.12.8 LooseScan

LooseScan 최적화 전략이 사용되면 표시

10.3.12.9 No matching min/max row

쿼리의 WHERE 조건절을 만족하는 레코드가 한 건도 없는 경우 일반적으로 “Impossible WHERE …“문장이 Extra 칼럼에 표시된다. MIN()이나 MAX()와 같은 집합 함수가 있는 쿼리의 조건절에 일치하는 레코드가 한 건도 없을때는 이 표시가 출력된다.

10.3.12.10 no matching row in const table

조인에 사용된 테이블에서 const 방법으로 접근할 때 일치하는 레코드가 없다면 표시

10.3.12.11 No matching rows after partition pruning

파티션된 테이블에 대한 UPDATE 또는 DELETE 명령의 실행 계획에서, 해당 파티션에서 UPDATE 하거나 DELETE 할 대상 레코드가 없을 떄 표시

10.3.12.12 No tables used

FROM절이 없는 쿼리 문장이나 "FROM DUAL" 형태의 쿼리 실행 계획에서는 Extra 칼럼에 “No tables used”라는 메시지가 출력된다.

10.3.12.13 Not exists

A 테이블에는 존재하지만 B 테이블에는 없는 값을 조회해야 하는 쿼리를 사용할 때, NOT IN(subquery) 형태나 NOT EXISTS 연산자를 주로 사용한다. 이러한 형태의 조인을 안티-조인(Anti-JOIN)이라고도 한다. 똑같은 처리를 아우터 조인(LEFT OUTER JOIN)을 이용해서도 구현할 수 있다. 일반적으로 NOT IN(subquery)이나 NOT EXISTS등의 연산자를 사용하는 안티-조인으로 처리해야 하지만 레코드의 건수가 많을 때는 아우터 조인을 이용하면 빠른 성능을 낼 수 있다. 아우터 조인을 이용해 안티-조인을 수행하는 쿼리에서는 실행 계획의 Extra 칼럼에 “nOT EXISTS” 메시지가 표시된다.