[ MySQL ] 실행 계획을 분석하는 방법
[ 실행 계획이란? ]
옵티마이저가 SQL문을 어떤 방식으로 처리할지 계획하는 것을 의미합니다.
즉, 실행 계획이 SQL 구문의 성능을 결정합니다.
실행 계획을 분석할 줄 알아야 SQL 구문의 문제가 어디인지 파악 할 수 있습니다.
그렇다면 어떻게 실행 계획을 분석할 수 있을까요?
[ 실행 계획 확인 방법 ]
# EXPLAIN
: 실행 계획을 조회 할 수 있습니다. 아래는 EXPLAIN시 중점을 두고 봐야 할 값들 입니다.
- type : 테이블의 데이터를 어떤 방식으로 조회하는지를 알려줍니다. (ALL,index,const,range,ref )
* ALL : 풀 테이블 스캔을 뜻하며, 인덱스를 활용하지 않고 테이블을 전부 다 뒤져서 데이터를 찾는 방식
* index : 풀 인덱스 스캔을 뜻하며, 인덱스 테이블을 끝까지 다 뒤져서 찾는 방식, 인덱스의 테이블이 실제 테이블보다 작기 때문에 풀테이블보다는 효율적, 하지만 인덱스 테이블 전체를 읽어야 하므로 아주 효율적인 것은 아닙니다.
* const : 데이터를 단번에 찾아오는 것을 뜻하며, 고유 인덱스나 기본 키로 조회한 경우 출력됩니다.
* range : 인덱스 레인지 스캔을 뜻하며, 인덱스를 활용해 범위 형태의 데이터를 조회하는 경우를 의미합니다.
* ref : 비고유 인덱스를 사용한 경우를 뜻합니다. UNIQUE가 아닌 컬럼의 인덱스를 사용한 경우를 의미합니다.
- possible keys : 사용할 수 있는 인덱스 목록 보여줍니다.
- key : 데이터 조회 시 실제 사용한 인덱스 값입니다.
- ref : 조인 상황에서 어떤 값을 기준으로 데이터를 조회했는 지 보여줍니다.
- rows : 데이터 액세스 수를 의미합니다. 이 값을 줄이는 것이 SQL 튜닝의 핵심입니다.
# EXPLAIN ANALYZE
: 실행 계획을 자세하게 조회 할 수 있습니다.
- actual time=0.0002..0.0034 : 앞에 있는 숫자인 0.0002 의 의미는 첫 번째 데이터에 접근하기까지의 시간이며, 뒤에 있는 0.0034는 마지막 데이터까지 접근한 시간을 의미합니다.
# 참고
비전공자도 이해할 수 있는 MySQL 성능 최적화 입문/실전 (SQL 튜닝편) 강의 | JSCODE 박재성 - 인프런
JSCODE 박재성 | , 🤬 에라이, 못 해먹겠네!비전공자로 개발을 시작해 여러 회사에서 CTO로 활동하다가, 현재는 교육자로 활동하고 있는 박재성이라고 합니다. 저도 비전공자로 개발을 시작해 MySQL
www.inflearn.com
- SQL 레벨업