DB/RDB

MySQL 조회시 플로우

doriver 2025. 4. 18. 21:49

 

  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 워크벤치는 실행계획의 시각화를 제공

워크벤치에서 Visual Optimizer 활용


어떤 테이블은 full table scan이고, 어떤 테이블은 index range / full / unique scan인지 시각화 하여 보여줍니다. 어떤 방식으로 조인되었고, 결과 row는 몇 개 이며, group by 및 order by는 어떤 식으로 수행되었는지 확인할 수 있습니다.