9.1 개요

9.1.1 쿼리 실행 절차

  1. 사용자로부터 요청된 SQL 문장을 잘게 쪼개서 MySQL 서버가 이해할 수 있는 수준으로 분리한다.(SQL 파싱)
  2. SQL의 파싱 정보를 확인하면서 어떤 테이블부터 읽고 어떤 인덱스를 이용해 테이블을 읽을지 선택한다. (옵티마이저)
  3. 두 번째 단계에서 결정된 테이블의 읽기 순서나 선택된 인덱스를 이용해 스토리지 엔진으로부터 데이터를 가져온다.

MySQL은 SQL 파스 트리를 이용해 쿼리 실행

9.1.2 옵티마이저의 종류

크게 비용 기반 최적화, 규칙 기반 최적화로 나눔

보통 비용 기반 최적화 사용

비용 기반 최적화는 쿼리를 처리하기 위한 여러 가지 가능한 방법을 만들고, 각 단위 작업의 비용 정보와 대상 테이블의 예측된 통계 정보를 이용해 실행 계획별 비용을 산출, 실행 방법별로 비용이 최소로 소요되는 처리 방식을 선택해 최종 쿼리 실행

9.2 기본 데이터 처리

9.2.1 풀 테이블 스캔과 풀 인덱스 스캔

풀 테이블 스캔 조건

InnoDB 스토리지 엔진은 특정 테이블의 연속된 데이터 페이지가 읽히면 백그라운드 스레드에 의해 리드 어해드 작업이 자동으로 시작됨

앞으로 필요할 데이터를 백그라운드에서 미리 읽어 버퍼 풀에 저장함(최대 64개의 데이터 페이지)

innodb_read_ahead_threshold 변수로 언제 리드 어헤드를 시작할지 설정 가능

풀 인덱스 스캔에서도 사용 가능