Open DaehunGwak opened 2 years ago
테이블 풀 스캔
)대부분의 DBMS의 목적은 크게,
이를 도와주는(달성해주는) mysql의 옵티마이저
히스토그램
도입
데이터 분포도 정보
스캔
)에 중요사용 가능한 인덱스를 샘플링(실제 B-tree)
하여 일치하는 레코드 건수를 대략 파악함Index Dive
innodb_stats_auto_recalc
환경변수 또는 STATS_AUTO_RECAL 테이블 생성 옵션싱글톤/높이 균형(equi-height)
히스토그램버킷(bucket)단위
로 구분되어 레코드 건수(유니크한 값 개수) 또는 컬럼값 범위를 관리함데이터는 항상 균등한 분포도를 갖지 않는다
MySQL 서버는 사용자 쿼리에 대해 위의 작업들이 얼마나 필요한지 예측하고 전체 비용을 바탕으로 최적의 실행 계획을 찾는다.
8.0 버전의 코스트 모델은 다음 테이블의 설정값을 사용함
server_cost
engine_cost
각 단위 작업에 설정되는 비용 값을 바꾸면 실행 계획들의 비용이 바뀌는지 파악할 필요가 있다.
대부분은 기본값으로 여전히 잘 사용돼어 왔으므로, 수정하지는 말자..
Using temporary
의 유무를 보고 판단 가능Using temporary
의 유무 만으론 임시테이블이 몇 개가 생성되었는지, 디스크 에 생성되었는지 확인이 불가FLUSH STATUS;
→ 쿼리 실행 → SHOW SESSION STATUS LIKE 'Created_tmp%'
index (last_name, first_name)
가정 시나리오... where last_name='action' and first_name like '%cal';
과 같은 쿼리는 5.5 까지 해당 칼럼이 인덱스에 있어도 스토리지 엔진에 넘겨주지 않고, 데이터를 다 받아 mysql 엔진에서 필터링 했었음ANALYZE TABLE ... UPDATE HISTOGRAM
명령을 통해 관리 (수동)
진도
9.2 기본 데이터 처리 9.3 고급 최적화 10.1 통계 정보
일정