실행 계획 분석: table 칼럼

공부하는 감자·2024년 4월 29일
0

MySQL

목록 보기
66/74
post-thumbnail

table 칼럼

  • MySQL 서버의 실행 계획은 단위 SELECT 쿼리 기준이 아니라 테이블 기준으로 표시된다.
  • 테이블의 이름에 별칭이 부여된 경우에는 별칭이 표시된다.

FROM 절이 없는 경우

## From 절이 없는 쿼리
SELECT NOW();

## 실제 DUAL이라는 테이블은 없다.
SELECT NOW() FROM DUAL;
  • MySQL 옵티마이저는 두 번째 쿼리가 요청되면 “FROM DUAL” 부분을 제거하고 첫 번째 쿼리와 동일하게 변형해서 처리한다.
    • 오라클 RDBMS에 익숙한 사용자를 위해 내부적으로 DUAL 테이블이 있는 것처럼 작동할 뿐이다.
  • 이 같이 별도의 테이블을 사용하지 않는 SELECT 쿼리인 경우, table 칼럼에 NULL이 표시된다.

임시 테이블

  • table 칼럼에 “<>”로 둘러싸인 이름이 명시되는 경우가 많은데, 이 테이블은 임시 테이블을 의미한다.
    • <derived N> 또는 <union M, N>
  • “<>” 안에 항상 표시되는 숫자는 단위 SELECT 쿼리의 id 값을 지칭한다.
    • 예를 들어, <derived 2> 라면 단위 SELECT 쿼리의 id 값이 2인 실행 계획으로부터 만들어진 파생 테이블을 가리킨다.

실행 계획 분석하기

  • id 칼럼과 select_type , table 칼럼은 실행 계획의 각 라인에 명시된 테이블이 어떤 순서대로 실행되는지를 판단하는 근거를 표시해준다.
    • 자세한 절차는 서적 431 페이지를 참고
  • MySQL 8.0 버전에서는 서브쿼리에 대한 최적화가 많이 보왔됐다.
    • select_typeMATERIALIZED 인 실행 계획에서는 table 칼럼에 <subquery N> 과 같은 값이 표시된다.
    • 이는 서브쿼리의 결과를 구체화(Materialization)해서 임시 테이블로 만들었다는 의미이며, 실제로는 <derived N> 과 같은 방법으로 해석하면 된다.

Reference

참고 서적

📔 Real MySQL 8.0

profile
책을 읽거나 강의를 들으며 공부한 내용을 정리합니다. 가끔 개발하는데 있었던 이슈도 올립니다.

0개의 댓글