많은 데이터베이스들이 있다.
-> 어떠 것들 부터 공부해야 할까?
관계형 데이터베이스는 아직까지 가장 범용적
백엔드 개발자라면 실무에서 관게형 데이터베이스를 실무에서 다루게 될 것
물론 그렇다고 다른 데이터베이스를 몰라야 하는 것은 아니다. 알아야합니다.
서로의 단점을 보완하고 발전한 상호보완적인 관계이기 때문
싸고 인기 많은 MySQL을 사용하자
데이터베이스는 파일을 관리하는 서버
MySQL 엔진은 판단을 하는
스토리지 엔진은 움직이는 몸
- SQL을 파싱하여 Syntax Tree를 만듬
- 이 과정에서 문법 오류 검사가 이루어짐
- 쿼리파서에서 만든 Tree를 바탕으로 전처리 시작
- 테이블이나 컬럼 존재 여부, 접근 권한 등 Semantic 오류 검사
쿼리파서, 전처리기는 컴파일 과정과 유사하다.
하지만 SQL은 프로그래밍 언어처럼 컴파일 타임때 검증 할 수 없어 매번 구문 평가를 진행
- 쿼리를 처리하기 위한 여러 방법들을 만들고, 각 방법들의 비용정보와 테이블의 통계정보를 이용해 비용을 선정
- 테이블 순서, 불필요한 조건 제거, 통계정보를 바탕으로 전략을 결정(실행 계획 수립)
- 옵티마이저가 어떤 전략을 결정했느냐에 따라 성능이 많이 달라진다.
옵티마이저가 결정하면 쿼리실행기가 결정한 계획대로 스토리지 엔진에 요청을 한다. 이때의 요청을 핸들러 API이다.
MySQL 5.0까지는 쿼리 캐시라는 것이 있었다.
사라졌다.
소프트 파싱
하드 파싱
스트리지 엔진