728x90

실행계획 분석하기

ID

SQL 문이 수행되는 순서를 의미합니다. 위의 실행계획을 확인할 경우 첫 번째 행과 두번째 행의 ID 가 같습니다.

 

 

SELECT_TYPE

select 문의 유형을 의미합니다.

  • SIMPLE: 단순한 SELECT 구문
  • PRIMARY: 서브쿼리를 감싸는 외부 쿼리, UNION 이 포함될 경우 첫번째 SELECT 문
  • SUBQUERY: 독립적으로 수행되는 서브쿼리 (SELECT, WHERE 절에 추가된 서브쿼리)
  • DERIVED: FROM 절에 작성된 서브쿼리
  • UNION: UNION, UNION ALL 로 합쳐진 SELECT
  • DEPENDENT SUBQUERY : 서브쿼리가 바깥쪽 SELECT쿼리에 정의된 칼럼을 사용
  • DEPENDENT UNION : 외부에 정의된 컬럼을 UNION으로 결합된 쿼리에서 사용하는 경우
  • MATERIALIZED : IN 절 구문의 서브쿼리를 임시 테이블로 생성한 뒤 조인을 수행
  • UNCACHEABLE SUBQUERY : RAND(), UUID() 등 조회마다 결과가 달라지는 경우

type

  • system : 테이블에 데이터가 없거나 한 개만 있는 경우
  • const : 조회되는 데이터가 단 1건일 때
  • eq_ref : 조인이 수행될 때 드리븐 테이블의 데이터에 PK 혹은 고유 인덱스로 단 1건의 데이터를 조회할 때
  • ref : eq_ref와 같으나 데이터가 2건 이상일 경우
  • index : 인덱스 풀 스캔
  • range : 인덱스 레인지 스캔
  • all : 테이블 풀 스캔

key

옵티마이저가 실제로 선택한 인덱스

 

rows

SQL문을 수행하기 위해 접근하는 데이터의 모든 행 수

 

extra

  • Distinct : 중복 제거시
  • Using where : WHERE 절로 필터시
  • Using temporary : 데이터의 중간결과를 저장하고자 임시 테이블을 생성, 보통 DISTINCT, GROUP BY, ORDER BY 구문이 포함된 경우 임시 테이블을 생성
  • Using index : 물리적인 데이터 파일을 읽지 않고 인덱스만 읽어서 처리. 커버링 인덱스라고 함
  • Using filesort : 정렬시

 

더 좋은 방향으로 튜닝하기

select_type

  • GOOD (SIMPLE, PRIMARY, DERVIED)
  • BAD (DEPENDENT, UNCACHEABLE)

type

  • GOOD (system, const, eq_req)
  • BAD (index, all)

extra

  • GOOD (Using index)
  • BAD (Using filesort, Using temporary)
728x90

'SQL > MySql' 카테고리의 다른 글

RealMySql - Select (Index)  (2) 2022.10.03
Mysql 자료형  (0) 2021.11.29
MySQL - tabel 생성하기  (0) 2020.10.10