RDB 인덱스 - (4) MySQL EXPLAIN 사용법

succeeding·2022년 5월 25일
0

RDB 인덱스

목록 보기
4/4

옵티마이저와 실행 계획

옵티마이저

[MySQL 옵티마이저 구조]MySQL옵티마저 구조

  • 옵티마이저는 쿼리문에 대한 최적의 실행 방법을 결정합니다.
  • 실행 계획이란 옵티마이저가 정한 실행 방법을 의미합니다.
  • 옵티마이저는 실행계획을 결정하는 방식에 따라 다음 두 가지로 나뉘어집니다.
    • 규칙 기반 옵티마이저(RBO, Rule Based Optimizer)
    • 비용 기반 옵티마이저(CBO, Cost Based Optimizer)
  • 대부분 RDB는 비용 기반 옵티마이저만을 지원하며, 규칙 기반 옵티마이저는 하위 호환성을 위해서만 제공되고 있습니다.

규칙 기반 옵티마이저

RBO는 다음 15가지 규칙(우선순위)로 동작합니다.(Oracle 기준입니다.)

순위 액세스기법
1 Single row by row id
2 Single row by cluster join
3 Single row by hash cluster key with unique or primary key
4 Single row by unique or primary key
5 Cluster join
6 Hash cluster key
7 Indexed cluster key
8 Composite index
9 Single column index
10 Bounded range search on indexed columns
11 Unbounded range search on indexed columns
12 Sort merge join
13 MAX or MIN of indexed column
14 ORDER BY on indexed column
15 Full table scan

자세한 설명은 여길 참고해주세요.

EXPLAIN이란?

  • MySQL에서는 'EXPLAIN` 키워드를 이용해 실행계획에 대한 정보를 제공합니다.
  • JSON 형식 출력이 가능하며, MySQL Workbench와의 결합을 시각화할 수도 있습니다.

문법

{EXPLAIN | DESCRIBE | DESC}
    [explain_type]
    {explainable_stmt | FOR CONNECTION connection_id}

explain_type: {
    FORMAT = format_name
}

format_name: {
    TRADITIONAL
  | JSON
  | TREE
}

explainable_stmt: {
    SELECT statement
  | TABLE statement
  | DELETE statement
  | INSERT statement
  | REPLACE statement
  | UPDATE statement
}

예시

사용예시
이미지 출처: linuxhint.com

출력 형식 설명

id

  • query 안에 있는 SELECT의 번호입니다.

select type

  • SELECT의 타입을 나타냅니다.
  • 대부분 값으로 SIMPLE을 가지며, UNION이나 서브쿼리를 사용하는 경우엔 다른 값을 갖습니다.

table

  • 출력 행이 참조하는 테이블의 이름입니다.

partitions

  • 파티셔닝이 되어 있는 경우에 사용되는 필드이며, 사용되지 않는 경우 NULL로 표시됩니다.

type

  • 테이블에서 행 데이터를 가져오는 방식인 join type을 표시하는 필드입니다.
  • 대상 테이블로의 접근에 대한 효율성 판단에 중요한 항목입니다.

possible_keys

  • 테이블에서 row를 찾기 위해 MySQL이 선택할 수 있는 인덱스들을 나타냅니다.

key

  • 사용한 인덱스를 나타냅니다.

key_len

  • 선택된 인덱스의 길이를 의미합니다.
  • 인덱스가 너무 길다면 비효율적입니다.

ref

  • 사용한 인덱스와 비교되는 컬럼이나 상수값을 의미합니다.

rows

  • 이 접근 방식을 사용해 몇 행을 가져왔는지 추정한 값입니다.

filtered

  • 적용된 조건에 의해 걸러진 테이블 로우의 퍼센테이지를 나타냅니다.

Extra

  • MySQL이 어떻게 쿼리를 수행하는지에 대한 추가적인 정보를 나타냅니다.
  • 옵티마이저의 행동을 파악할 때 중요합니다.

이외에...

이외에도 아래의 그림 처럼 테이블의 컬럼에 대한 정보를 얻을 수 있습니다.

EXPLAING의 더 다양한 사용법을 알고 싶다면 MySQL 공식문서를 참고해보세요.

참고문헌

0개의 댓글