흔히들 쿼리 퍼포먼스 분석등을 할 때 EXPLAIN 이나 DESCRIBE등을 이용해 실행 계획을 분석하고 쿼리 최적화를 하라는 말을 하고는 한다.
그런데 내 기준에서 이걸 보고 어떻게 해야 할지 가늠을 할 수가 없었다. 대략적으로만 파악을 하고, 실제 나오는 결과를 어떻게 분석하고 어떻게 튜닝해야 할 지 알 수 없었기에 해당 책에서 나온 내용을 토대로 실행 계획 분석 및 각각의 키워드가 무엇을 의미 하는지에 대해 알아보자.
테스트를 하기 위한 데이터를 준비해야 한다.
책에서는 직접 MySQL(or MariaDB)를 설치하고, 데이터를 추가해주고 있지만, 컴퓨터에 여러 DBMS를 더 설치하는 것도 꺼려지고, 좀 더 라이트하게 설치를 하고 싶기에 Docker를 이용해서 설정해주도록 한다.
Download Docker Desktop | Docker
만약 Docker가 설치되어 있지 않다면 위 링크를 통해 설치해주도록 하자.
설치가 완료 되었다면, 이제 MySQL(or MariaDB) 이미지를 받아서 마운트 시켜줘야 한다. 다음 명령어를 차례대로 실행 시켜보자.
Pulling Image
docker pull ${imageName}:${version}
(Ex: docker pull mysql:8.0.32)
이미지가 제대로 pulling되었는지는 docker images로 확인해봐도 되고 docker desktop의 GUI를 통해 확인해도 된다.
docker desktop의 images section
Create Container
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password --name catsbi-mysql -v /Users/catsbi/mysql:/var/lib/mysql mysql:8.0.32 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
-d
: 데몬으로 실행 하며 백그라운드에서 돌아가게 만드는 명령어
-p 3306:3306
: 컨테이너 포트 포워딩 외부에서 3306 포트로 접속해면 내부적으로도 3306 포트에 연결된다. -p를 여러개 중첩 작성해서 여러 포트를 포워딩 할 수도 있다.
-e MYSQL_ROOT_PASSWORD=password
: 컨테이너에 환경 변수를 설정한다. root 계정 비밀번호를 password로 설정해주는 옵션이다.
--name catsbi-mysql
: 컨테이너의 이름을 부여한다.
-v /Users/catsbi/mysql:/var/lib/mysql
: 호스트와 컨테이너 볼륨 마운팅 옵션으로 호스트의 /Users/catsbi/mysql
경로와 컨테이너의 /var/lib/mysql
경로를 마운팅시킨다.
mysql:8.0.82
: 사용하고자 하는 Docker 이미지 명시
--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
: 서버의 기본 문자셋과 정렬 순서 설정 옵션