데이터베이스는 결국에는 파일을 관리하는 서버이다.
서버는 SQL을 통해서 MySQL 서버에 데이터를 요청하게 되는 것
MySQL 서버
MySQL엔진 -> 스토리지 엔진 -> 운영체제 -> 디스크 로 이루어짐
1) MySQL엔진 : 판단과 명령을 하는 두뇌 역할
쿼리 파서 -> 전처리기 -> 옵티마이저 -> 쿼리 실행기로 이루어짐
쿼리파서
- SQL을 파싱하여 Sytax Tree를 만들고 이 과정에서 문법 오류 검사가 이루어짐
- Sytax Tree(구문 트리) : 문법적으로 정의된 문장 또는 표현의 구조를 나타내는 계층적인 트리 구조
전처리지
- 쿼리파서에서 만든 Tree를 바탕으로 전처리 시작
- 테이블이나 컬럼 존재 여부, 접근권한 등 Semantic오류 검사
쿼리파서,전처리기는 컴파일 과정과 매우 유사함
하지만 SQL은 프로그래밍 언어처럼 컴파일 타임때 검증 할 수 없어 매번 구문 평가를 진행
옵티마이저
- 쿼리를 처리하기 위한 여러 방법들을 만들고, 각 방법들의 비용정보와 테이블의 통계정보를 이용해 비용을 산정
- 테이블 순서, 불필요한 조건 제거, 통계정보를 바탕으로 전략을 결정
- 옵티마이저가 어떤 전략을 결정하느냐에 따라 성능이 많이 달라짐
- 가끔씩 성능이 나쁜 판단을 해 개발자가 힌트를 사용해 도움을 줄 수 있음
쿼리실행기
- 옵티마이저가 결정한 방법대로 쿼리를 실행함 이때 Handler API를 사용하게 됨
- Handler API의 조건을 만족하는 스토리지 엔진만 구현할 수 있다면, 어떤 식이든 직접 구현하여 스토리지 엔진을 사용할 수 있음
2)스토리지 엔진 : 판단을 수행하는 팔과 다리 역할
- 디스크에서 데이터를 가져오거나 저장하는 역할
- MySQL 스토리지 엔진은 플러그인 형태로 Handler API만 맞춘다면 직접 구현해서 사용할 수 있음
- 8.0대 부터는 InnoDB 엔진을 디폴트로 사용