database

MYSQL 조회시 FLOW

MIN우 2023. 4. 11. 22:57
728x90

MySQL 조회시 플로우

아래는 MySQL 서버에 조회를 요청 했을 때 flow chart입니다.

여기서 client는 쿼리를 요청한 클라이언트, 즉 SQL을 입력한 개발자입니다.

  1. Query Cache
    • SQL문이 key, 결과가 value인 맵입니다. 데이터가 변경되었으면 쿼리캐시가 삭제되어야겠죠?(조회 결과가 달라질 것이기 때문에) 이는 동시 처리 성능 저하를 유발하고, 버그의 원인이 되어 MySQL 8.0 버전부터는 삭제되었습니다.
  2. Parsing
    • 사용자가 요청한 SQL을 잘게 쪼개어 서버가 이해할 수 있는 수준으로 분리합니다.
  3. Preprocessing
    • 해당 쿼리가 문법적으로 틀린지 확인하여 부정확하면 처리를 중단합니다. (흔히 만나보는 syntax 에러는 parser와 preprocessor에서 발생합니다.)
  4. Query Optimization
    • 실행계획은 이 단계에서의 출력을 의미합니다.
    • 쿼리 분석 : where절의 검색 조건인지, join 조건인지 판단합니다.
    • 인덱스 선택 : 각 테이블에 사용된 조건과 인덱스 통계 정보를 이용해 사용할 인덱스를 결정합니다.
    • 조인 처리 : 여러 테이블의 조인이 있는 경우, 어떤 순서로 테이블을 읽을지 결정합니다.
  5. Handler (Storage Engine)
    • MySQL Execution engine의 요청에 따라 데이터를 디스크로 저장하고, 디스크로부터 읽어오는 역할을 합니다. 대표적인 스토리지 엔진은 InnoDB, MyISAM 이 있습니다. MySQL 엔진에서는 스토리지 엔진으로부터 받은 레코드를 조인하거나 정렬하는 작업을 수행합니다.

우리가 SQL을 작성 했을 때, parser와 preprocessor에 의해 분해되고, query optimizer에 의해 최상의 실행계획을 수립하여 실행된다는 것을 알게 되었네요!

728x90