백엔드 개발자 블로그

MySQL 옵티마이저 본문

테크 블로그 리뷰

MySQL 옵티마이저

backend-dev 2024. 12. 11. 21:47

MySQL 아키텍처

MySQL 엔진(SQL문 분석, 최적화) + 스토리지 엔진(데이터 저장/조회)

MySQL 옵티마이저는 MySQL 엔진에 포함됨


실행과정

1. SQL 파서 : SQL문을 MySQL 서버가 이해할 수 있도록 분리 = 파스 트리

2. SQL 옵티마이저 : 파스 트리를 확인하여 쿼리 최적화 및 실행계획 수립

3. 데이터 읽기/쓰기 : 결정된 정보를 토대로 스토리 엔진에서 필요한 데이터 가져오기


실행계획이란?

옵티마이저가 결정한 최적의 쿼리 실행방법


실행계획 분석

type : 각 테이블의 레코드를 어떤 방식으로 조회했는지

오른쪽으로 갈수록 안좋음

  • const : 일치하는 행이 하나, 조건절에 PK or Unique 컬럼 이용
  • ref : PK or Unique 컬럼이 아닌 인덱스, 동등 조건으로 검색할 때
  • range : 인덱스 레인지 스캔
  • index : 인덱스 테이블 풀 스캔
  • all : 테이블 풀 스캔 => 인덱스를 추가해주자

 

key : 후보 인덱스 중 실제로 선택한 인덱스

 

rows : 쿼리를 실행하기 위해 조사해야하는 행의 수 = 줄이는 것이 성능에 좋음, 정확하지는 않은 값임

 

Extra : 내부적인 처리 알고리즘

  • Using filesort : 정렬을 처리하기 위한 적절한 인덱스를 찾지 못한 경우 사용되는 정렬 방식
  • Using temporary : 병합할 때 사용되는 새로운 공간
  • Using index : 데이터 파일을 읽지 않고 인덱스 테이블만 읽어 쿼리를 처리할 수 있을 때 (커버링 인덱스)

'테크 블로그 리뷰' 카테고리의 다른 글

인덱스와 스캔 튜닝  (0) 2024.12.11
OSI7 계층  (0) 2024.11.01
낙관적 락 vs 비관적 락  (0) 2024.10.24
멀티쓰레드와 동기화  (0) 2024.10.24
DI  (0) 2024.10.24