•
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 챕터에서 출력된 실행 계획에서 각 칼럼이 어떤 것을 의미하는 지 등을 분석하는 여러가지 요소에 대해 소개한다.
•
디테일한 부분을 요약하는 것은 단순 요약 정리에 가까워서 생략. 만약 데이터베이스 조회 시 쿼리 실행이 너무 오래 걸린다거나 하는 일이 있다면 관련 업무 도중 다시 돌아와서 볼 수 있는 챕터 정도로 기억하려고 한다.