Query 실행 절차

귀찮Lee·2023년 2월 19일
0

DataBase / MySQL

목록 보기
6/16
post-thumbnail
post-custom-banner

◎ Query 실행 절차

  • 필요성

    • DB에 Query를 보내는 것도 일종의 명령어이기 때문에 문법에 맞게 작성되었는지 등의 절차를 필요로 한다.
    • 문법이 올바른 Query가 도착한다고 하더라도 DB에서 이해할 수 있도록 변환하는 과정이 필요하다.
  • Query Parsing

    • MySQL 엔진의 쿼리 파서에서 SQL을 파싱하여 Syntax Tree를 만드는 과정
    • 컴파일 과정과 유사, 프로그래밍 언어처럼 컴파일 타임 때 검증할 수 없어 매번 구문 평가를 진행
  • Query Parsing 과정

    1. Lexical analysis(어휘 분석): 쿼리를 키워드, 식별자 및 연산자와 같은 개병 토큰 단위로 분류
    2. Syntax analysis(문법 분석): 쿼리가 문법에 맞게 쓰였는지 확인하고, 모든 요소들이 올바르게 사용되었는지 확인한다.
    3. Semantic analysis(의미 분석): 모든 Table과 Column이 존재하는지 확인하고, 해당 부분이 문법적으로 올바른지 확인한다.
    4. Query optimization(쿼리 최적화): 쿼리를 가장 최적화하는 실행 계획을 세우면서 실행 최적화를 진행함
      • tip) 해당 쿼리 앞에 EXPLAIN을 붙여서 사용하면 해당 쿼리의 실행 계획을 출력하여 볼 수 있다.
  • Query Parsing 특징

    • 불필요한 조건 제거 및 복잡한 연산 단순화
    • join의 경우, read 순서를 알아서 결정함 (driving table. vs driven table)
    • 각 테이블 별 조건과 인덱스 통계정보를 활용하여 사용할 인덱스 결정
    • 임시테이블에 데이터를 두고 한 번 더 가공할지 결정

◎ Query 문 실행 순서

  • SELECT 문 실행 순서

    • FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT
    • 내장 함수는 GROUP BY 와 SELECT 사이에 실행된다. (CONCAT, MAX, MIN, ...)
  • 예제 쿼리

    -- 정상작동하는 쿼리
    SELECT CONCAT(first_name, last_name) AS full_name
    FROM Employee
    ORDER BY full_name;
    
    -- 실행이 안됨 (SELECT 보다 WHERE 보다 우선적으로 실행되기 때문에)
    -- WHERE 실행 시, "full_name"이 무엇인지 인식할 수 없다.
    SELECT CONCAT(first_name, last_name) AS full_name
    FROM user
    WHERE full_name = 'RobertKing';
profile
배운 것은 기록하자! / 오류 지적은 언제나 환영!
post-custom-banner

0개의 댓글