MySQL ‐ 실행 계획(EXPLAIN)을 활용해 성능 저하 지점 찾기 - dnwls16071/Backend_Study_TIL GitHub Wiki
📚 SQL문의 실행 계획 사용하기
- 실행 계획이란, 옵티마이저가 SQL문을 어떤 방식으로 어떻게 처리할 것인지를 계획한 것을 말한다.
- 실행 계획을 확인하는 방법은 아래와 같다.
EXPLAIN [SQL문]
EXPLAIN ANALYZE [SQL문]
📚 type 의미 (1) : ALL, index
- ALL : 풀 테이블 스캔, 인덱스를 활용하지 않고 테이블을 처음부터 끝까지 전부 다 뒤져서 데이터를 찾는 방식을 말한다.
- 일반적으로 테이블 전체 크기는 인덱스보다 훨씬 크기 때문에 테이블을 처음부터 끝까지 읽는 작업은 상당히 많은 디스크 읽기가 필요하다.
- 대부분 DBMS는 풀 테이블 스캔을 할 때, 한꺼번에 여러 개의 블록이나 페이지를 읽어오는 기능을 내장하고 있다.
- 하지만 MySQL에는 풀 테이블 스캔을 할 때, 한꺼번에 몇 개씩 페이지를 읽어올지 설정하는 시스템 변수는 없다.

- index : 풀 테이블이 아닌 인덱스 테이블을 처음부터 끝까지 다 뒤져서 데이터를 찾는 방식이다. 인덱스 테이블은 실제 테이블보다 작기 때문에 풀 테이블 스캔보다는 효율적이다. 하지만 인덱스 테이블 전체를 읽어야 하기 때문에 아주 효율적이라고는 볼 수 없다.

📚 type 의미 (2) : const, range, ref
- const : 조회하고자 하는 1건의 데이터를 헤매지 않고 단번에 찾아올 수 있을 때 const가 나온다. 고유 인덱스 또는 기본키를 사용해서 1건의 데이터만 조회하는 경우를 말하며 이 방식은 아주 효율적인 방식이다.
- UNIQUE 속성을 가진 컬럼은 인덱스가 자동으로 생성되며 해당 컬럼은 중복을 허용하지 않기 때문에 const 값을 가지게 된다.

- range : 인덱스를 활용해 범위 형태의 데이터를 조회한 경우를 의미한다. 이 방식은 인덱스를 활용하기 때문에 효율적이나 인덱스를 사용하더라도 데이터를 조회하는 범위가 클 경우 성능 저하의 원인이 된다.

- ref : 비고유 인덱스를 사용한 경우(UNIQUE 속성이 없는 컬럼의 인덱스를 사용한 경우) ref라고 한다.