728x90
MySQL 조회시 플로우
아래는 MySQL 서버에 조회를 요청 했을 때 flow chart입니다.
여기서 client는 쿼리를 요청한 클라이언트, 즉 SQL을 입력한 개발자입니다.
- Query Cache
- SQL문이 key, 결과가 value인 맵입니다. 데이터가 변경되었으면 쿼리캐시가 삭제되어야겠죠?(조회 결과가 달라질 것이기 때문에) 이는 동시 처리 성능 저하를 유발하고, 버그의 원인이 되어 MySQL 8.0 버전부터는 삭제되었습니다.
- Parsing
- 사용자가 요청한 SQL을 잘게 쪼개어 서버가 이해할 수 있는 수준으로 분리합니다.
- Preprocessing
- 해당 쿼리가 문법적으로 틀린지 확인하여 부정확하면 처리를 중단합니다. (흔히 만나보는 syntax 에러는 parser와 preprocessor에서 발생합니다.)
- Query Optimization
- 실행계획은 이 단계에서의 출력을 의미합니다.
- 쿼리 분석 : where절의 검색 조건인지, join 조건인지 판단합니다.
- 인덱스 선택 : 각 테이블에 사용된 조건과 인덱스 통계 정보를 이용해 사용할 인덱스를 결정합니다.
- 조인 처리 : 여러 테이블의 조인이 있는 경우, 어떤 순서로 테이블을 읽을지 결정합니다.
- Handler (Storage Engine)
- MySQL Execution engine의 요청에 따라 데이터를 디스크로 저장하고, 디스크로부터 읽어오는 역할을 합니다. 대표적인 스토리지 엔진은 InnoDB, MyISAM 이 있습니다. MySQL 엔진에서는 스토리지 엔진으로부터 받은 레코드를 조인하거나 정렬하는 작업을 수행합니다.
우리가 SQL을 작성 했을 때, parser와 preprocessor에 의해 분해되고, query optimizer에 의해 최상의 실행계획을 수립하여 실행된다는 것을 알게 되었네요!
728x90
'database' 카테고리의 다른 글
Docker Mysql 테스트서버 DB분리 (0) | 2024.06.07 |
---|---|
Statement보다 PreparedStatement를 사용해야하는이유 (0) | 2024.06.06 |
mysql index를 타지않는 경우 (0) | 2024.03.17 |
Querydsl 방언 사용하기 (2) | 2024.02.12 |
mysql DB 데이터 백업/복구(export/import) dump뜨는법 (1) | 2024.01.06 |