책너두 (Real MySQL 8.0 1권) 39일차 (~433p)

요약

  • table 칼럼에 표시되는 값들의 의미를 이해하게 됨.
  • partitions 칼럼에 표시되는 값이 무슨 의미인지 이해하게 됨.

메모

table 칼럼

  • MySQL 서버 실행 계획은 단위 SELECT 쿼리 기준이 아니라 테이블을 기준으로 표시됨.
  • 테이블 이름에 별칭이 부여된 경우, 별칭이 표시됨.
  • 별도의 테이블을 사용하지 않는 SELECT 쿼리인 경우, table 칼럼에 NULL 이 표시됨.
  • 또는 <union M,N>과 같이 “<>”로 둘러싸인 이름이 명시되는 경우가 많은데, 이 테이블은 임시 테이블을 의미함.
  • “<>”안에 항상 표시되는 숫자는 단위 SELECT 쿼리의 id 값을 지칭함.
  • select_type이 MATERIALIZED인 실행 계획에서는 “”과 같은 값이 table 칼럼에 표시됨.
    • 이는 서브쿼리의 결과를 구체화(Materialization)해서 임시 테이블로 만들었다는 의미임.
    • 실제로는 과 같은 방법으로 해석하면 됨.

partitions 칼럼

  • 5.7 버전까지는 옵티마이저가 사용하는 파티션들의 목록은 EXPLAIN PARTITION 명령을 이용해 확인 가능했음.
  • 8.0 버전부터는 EXPLAIN 명령으로 파티션 관련 실행 계획까지 모두 확인할 수 있게 변경됨.
  • 파티션 명령을 이용하면 레코드들을 파티션에 나누어 저장할 수 있음.
    • 파티션 생성 시, 파티션 키로 사용되는 칼럼은 프라이머리 키를 포함한 모든 유니크 인덱스의 일부여야 한다는 제약 사항이 존재함.
  • 조회하려는 쿼리를 통해 데이터가 어떤 파티션에 저장되어 있는지 알 수 있음.
    • 실행 계획에서 나머지 파티션에 대해서는 어떻게 접근할지 데이터 분포가 어떠한지 등의 분석을 실행하지 않음.
    • 이처럼 파티션이 여러 개인 테이블에서 불필요한 파티션을 빼고 쿼리를 수행하기 위해 접근해야 할 것으로 판단되는 테이블만 골라내는 과정을 파티션 프루닝(Partition pruning) 이라고 함.
  • 쿼리 실행 계획을 통해 어느 파티션을 읽는지 확인할 수 있어야 쿼리 튜닝이 가능함.
    • 실행 계획의 partitions 칼럼에 표시해줌. (어느 파티션에만 접근했는지 알려줌)
    • 여기서, type 칼럼의 값이 ALL 일 수 있음.
      • 즉, 풀 테이블 스캔으로 쿼리가 처리된 다는 것을 의미함.
      • 어떻게 풀 테이블 스캔으로 테이블의 일부(일부 파티션)만 읽을 수 있을 까?
        • 그 이유는 MySQL을 포함한 대부분의 RDBMS에서 지원하는 파티션은 물리적으로 개별 테이블처럼 별도의 저장 공간을 가지기 때문.
        • 즉, 모든 파티션에 대한 스캔이 아니라 실행 계획에서 얻은 특정 파티션만을 풀 스캔한다는 의미임.

댓글

Designed by JB FACTORY