😑

10. 실행 계획

Tags
챕터 내용 정리
DBMS의 목적은 결국 데이터를 빠르게 조회하는 것이다.
빠른 데이터 조회를 위해 옵티마이저는 가장 효율적으로 쿼리를 수행해 데이터를 읽어오는 쿼리의 실행 계획을 수립한다.
실행 계획을 위해 MySQL에서는 쿼리와 레코드의 통계 정보를 제공한다.
실행 계획을 수립하기 위해 통계 정보가 필요하고 중요하다.

통계 정보

1.
테이블과 인덱스 통계 정보
5.x 버전까지는 통계 정보가 mysql의 설정이 바뀔 때마다 휘발되곤 했다(휘발성이 높음).
8.x 버전부터는 테이블의 통계 정보를 영구적으로 저장하거나 기간을 조정할 수 있다.
2.
히스토그램
종류
싱글톤: UNIQUE 값이 적다.
높이 균형: 레코드 건수 비율이 누적된다.
각 범위 별 레코드 건수와 유니크 값의 개수 정보를 통해 더 정확한 실행 계획을 예측한다.
히스토그램이
있다 ⇒ 특정 범위에 대한 실행 계획이 효율적일 확률이 높아진다.
없다 ⇒ 균등하게 레코드가 분포되었다고 예측한다.
3.
코스트 모델
전체 쿼리 비용 계산 시, 필요한 단위 작업들의 비용
종류
engine cost: 데이터 페이지에 대한 코스트
server cost: 인덱스, 레코드 비교, 임시 테이블 처리에 대한 코스트
(cost_name, default_value, cost_value)
(+ engine_name, device_type)
위의 대표적인 세 가지 종류 통계 정보를 통해 실행 계획을 설정한다.
책에서는 10.2 챕터에서 실행 계획을 확인하는 EXPLAIN 등에 대한 방법을, 10.3 챕터에서 출력된 실행 계획에서 각 칼럼이 어떤 것을 의미하는 지 등을 분석하는 여러가지 요소에 대해 소개한다.
디테일한 부분을 요약하는 것은 단순 요약 정리에 가까워서 생략. 만약 데이터베이스 조회 시 쿼리 실행이 너무 오래 걸린다거나 하는 일이 있다면 관련 업무 도중 다시 돌아와서 볼 수 있는 챕터 정도로 기억하려고 한다.