[MySQL Explain] 쿼리의 실행 계획 살펴보기

728x90
반응형
SMALL

출처 : https://distributedsystemsauthority.com/

 

Explain

MySQL 서버가 어떠한 쿼리를 실행할 것인가, 즉 실행 계획이 무엇인지 알고 싶을 때 사용하는 기본적인 명령어

 

단순한 SELECT 구문, 옵티마이저는 INDEX 중 KEY 인덱스를 사용하여 데이터에 접근했다. 총 3946건의 행을 가져왔고 INDEX와 WHERE 조건을 사용했다.

  1. ID
    • 쿼리 처리 순서

  2. SELECT_TYPE
    • SIMPLE : UNION이나 SUB-QUERY가 없는 단순한 SELECT문
    • PRIMARY : SUB-QUERY를 사용할 경우 SUB-QUERY의 외부에 있는 첫 번째 QUERY / UNION을 사용할 경우 UNION의 첫 번째 SELECT QUERY
    • UNION : UNION QUERY에서 PRIMARY를 제외한 나머지 SELECT문
    • DEPENDENT UNION : UNION과 동일하나, 외부 QUERY에 의존적
    • UNION RESULT : UNION QUERY의 결과물
    • SUBQUERY : SUB-QUERY 또는 SUB-QUERY를 구성하는 여러 QUERY 중 첫 번째 SELECT문
    • DEPENDENT SUBQUERY :SUBQUERY와 동일하나, 외곽 QUERY에 의존적
    • DERIVED : SELECT로 추출된 테이블 (FROM절에서의 SUB-QUERY 또는 INLINE VIEW)

  3. TABLE
    • Table명 또는 Alias

  4. TYPE  
    • 데이터 접근 방식, 테이블에서 어떻게 행 데이터를 가져오는 표시
    • ALL, INDEX는 테이블 또는 특정 인덱스가 전체 행에 접근하기 때문에 테이블 크기가 큰 경우 효율이 떨어진다.
    • ref_or_null은 NULL이 들어있는 행은 인덱스의 맨 앞에 모아 저장하지만 그 건수가 많으면 MySQL 서버의 작업량이 방대해진다.
    • TYPE가 ALL 또는 INDEX인 경우는 그 쿼리로 사용할 수 있는 적절한 인덱스가 없다는 의미일 수도 있다.
    • 효율적인 TYPE : CONST, REF, EQ_REF, RANGE

    • CONST : 기본키 또는 고유키에 의한 lookup, 조인이 아닌 가장 외부의 테이블에 접근하는 방식
    • SYSTEM : 테이블에 1행밖에 없는 경우의 특수한 접근 방식
    • ALL : 전체 행 스캔, 테이블의 데이터 전체에 접근하는 방식
    • INDEX : 인덱스 스캔, 테이블의 특정 인덱스의 전체 엔드리에 접근하는 방식
    • EQ_REF : 조인이 내부 테이블로 접근할 때 기본키 또는 공유키에 의한 lookup이 일어나는 방식, CONST와 비슷하지만 조인의 내부 테이블에 접근하는 부분이 차이점
    • REF : 고유키가 아닌 인덱스에 대한 lookup, 여러개의 행에 접근하는 가능성 존재
    • REF_OR_NULL : REF와 마찬가지로 인덱스 접근 시 맨 앞에 저장되어 있는 NULL의 엔트리를 검색
    • REANGE : 인덱스 특정 범위의 행에 접근

  5. KEY 
    • 인덱스 목록 중 실제로 옵티마이저가 선택한 인덱스

  6. ROWS
    • 접근 방식을 사용해 몇 행을 가져왔는지 표시

  7. EXTRA
    • 옵티마이저가 동작하는 방식에 관한 내용
728x90
반응형
LIST