2023/01 14

Chapter 09.03 고급 최적화

9.3 고급 최적화 옵티마이저는 통계 정보와 옵티마이저 옵션을 결합해서 최적의 계획을 수립한다. 옵티마이저 옵션 조인 관련 옵티마이저 옵션 옵티마이저 스위치 옵티마이저 스위치: MySQL 서버의 고급 최적화 기능들을 활성화할지를 제어하는 용도이다. 9.3.1 옵티마이저 스위치 옵션 변수 optimizer_switch를 이용한다. 옵티마이저 스위치 이름 batched_key_access (기본값 off) block_nested_loop engine_condition_pushdown index_condition_pushdown use_index_extensions index_merge index_merge_intersection index_merge_sort_union index_merge_union mrr..

Chapter 09.02 기본 데이터 처리

9.2 기본 데이터 처리 모든 RDBMS는 데이터 가공 결과물이 동일하나 처리 과정은 벤더별로 차이가 있다. 기본적인 데이터 가공을 위해서 MySQL 서버가 어떤 알고리즘을 사용하는지 알아본다. 9.2.1 풀 테이블 스캔과 풀 인덱스 스캔 Def) 풀 테이블 스캔 인덱스를 이용하지 않고 테이블의 데이터를 처음부터 끝까지 읽어서 요청된 작업을 처리하는 작업이다. 상당히 많은 디스크 읽기가 필요하다. 대부분의 DBMS는 한꺼번에 여러 개의 블록이나 페이지를 읽어오는 기능을 내장한다. 그러나 MySQL은 한꺼번에 몇 개씩 페이지를 읽어올지 설정하는 시스템 변수는 없다. 풀 테이블 스캔을 실행할 때 MyISAM 스토리지 엔진: 디스크로부터 페이지를 하나씩 읽어온다. InnoDB 스토리지 엔진: 특정 테이블의 연..

Chapter 09.01 옵티마이저(Optimizer)와 힌트

9.1 개요 실행 계획을 이해해야 실행 계획의 불합리한 부분을 찾아내고 더 최적화된 방법으로 실행 계획을 수립하도록 유도 가능하다. Def) 옵티마이저(Optimizer): MySQL은 쿼리를 최적으로 실행하기 위해 데이터가 어떤 분포로 저장돼있는지 통계 정보를 참조한다. 기본 데이터를 비교해서 최적의 실행 계획을 수립하는 작업을 말한다. MySQL 서버를 포함한 대부분의 DBMS에서 이러한 기능을 담당한다. 명령어 EXPLAIN으로 쿼리 실행 계획을 확인할 수 있다. 9.1.1 쿼리 실행 절차 SQL 파싱(parsing): 사용자로부터 요청된 SQL 문장을 잘게 쪼개서 MySQL 서버가 이해할 수 있는 수준으로 분리 (파스 트리)한다. SQL 파서라는 모듈로 처리한다. SQL 문법 검사 SQL 파스 트..

Chapter 08.08 클러스터링 인덱스(Clustering Index)

8.8 클러스터링 인덱스(Clustering Index) 클러스터링: 여러 개를 하나로 묶는다는 의미로 사용한다. Def) 클러스터링: MySQL에서 클러스터링은 테이블의 레코드를 비슷한 것들끼리 묶어서 저장하는 형태로 구현된다. 클러스터링 인덱스는 InnoDB 엔진에서만 지원한다. 8.8.1 클러스터링 인덱스(Clustering Index) Def) 클러스터링 인덱스는 테이블의 프라이머리 키에 대해서만 적용된다. PK가 비슷한 레코들끼리 묶어서 저장하는 것을 말한다. PK 값에 의해서 레코드의 저장 위치가 결정된다. PK값이 변경된다면 레코드의 저장위치가 바뀌어야한다는 뜻이다. PK 값으로 클러스터링된 테이블은 프라이머리 키 값 자체에 대한 의존도가 상당히 크기 때문에 PK를 신중하게 결정한다. 클러스..