쿼리를 처리하는 과정

Laigasus

Infra|2024년 8월 23일|마지막 수정 시간: 2024년 9월 24일|
type
status
date
slug
summary
tags
category
icon
password
notion image

1. 파싱 (Parsing)

SQL 쿼리가 데이터베이스 서버에 도착하면, 먼저 SQL 파서(Parser)가 쿼리를 분석합니다.
이 단계에서 쿼리의 문법이 올바른지 확인하고, 쿼리를 내부 표현으로 변환합니다.

하드 파싱

하드 파싱은 SQL 문을 처음 읽고 이해하는 과정입니다.
이 과정에서 데이터베이스는 SQL 문의 문법을 확인하고, 의미를 파악하며, 실행 계획을 만듭니다.
하드 파싱은 컴퓨터 자원을 많이 사용합니다.
그래서 자주 실행되는 쿼리에 하드 파싱을 계속 사용하면, 데이터베이스 성능이 떨어질 수 있습니다.

소프트 파싱

소프트 파싱은 이미 사용한 SQL 문의 실행 계획을 다시 쓰는 방법입니다.
데이터베이스는 자주 쓰는 SQL 문의 실행 계획을 임시 저장소에 보관합니다.
같은 SQL 문을 다시 실행할 때, 이 저장된 계획을 사용해 파싱 작업을 줄이고 쿼리 실행을 더 빠르게 할 수 있습니다.
 
💡
SQL 검증이 뭔가요?
SQL 검증은 SQL 쿼리의 문법과 구조가 올바른지 확인하는 과정입니다.
이는 파싱 단계의 일부로, 데이터베이스 시스템이 쿼리를 실행하기 전에 수행됩니다.
아래의 검사를 수행합니다.
  • Syntax check: 문법적 에러 확인
  • Semantic Check: 테이블, 칼럼 유무 확인
 
💡
실행계획은 무엇인가요?
실행 계획은 데이터베이스가 SQL 쿼리를 어떻게 실행할지를 상세히 설명하는 로드맵입니다.
쿼리 옵티마이저가 생성하며, 데이터를 가져오는 가장 효율적인 방법을 결정합니다.
테이블 접근 방식, 조인 순서, 인덱스 사용 여부 등을 포함하여 쿼리 성능을 최적화합니다.

2. 옵티마이징 (Optimizing)

파싱된 쿼리는 옵티마이저로 전달됩니다.
인덱스, 조인 순서, 접근 경로 등을 고려하여 쿼리의 최적 실행 방법을 결정합니다.

RBO(Rule Based Optimizer)

RBO는 미리 정의된 규칙을 기반으로 쿼리 실행 계획을 선택합니다. 데이터의 특성을 고려하지 않고 고정된 규칙을 따릅니다. 예를 들어, 항상 인덱스를 사용하거나 특정 조인 유형을 우선시합니다.

CBO(Cost-Based Optimizer)

CBO는 쿼리 실행 비용을 예측하고 최소화합니다. 테이블 크기, 인덱스, 데이터 분포 등의 통계를 활용해 각 실행 계획의 비용을 계산하고, 최저 비용의 계획을 선택해 쿼리를 실행합니다.

3. 실행 계획 생성 (Execution Plan Generation)

옵티마이저가 선택한 최적의 실행 계획을 생성합니다.
실행 계획은 쿼리를 실제로 어떻게 실행할지에 대한 상세한 단계별 지침입니다.

4. 실행 (Execution)

실행 계획에 따라 쿼리가 실행됩니다.
데이터베이스 엔진은 필요한 데이터를 읽고, 조인하고, 필터링하고, 정렬하는 등의 작업을 수행합니다.

쿼리 실행 순서

  1. FROM 기본 데이터를 가져오기 위해 테이블을 조인합니다.
  1. WHERE 기본 데이터가 필터링됩니다.
  1. GROUP BY - 필터링된 기본 데이터가 그룹화됩니다.
  1. HAVING - 그룹화된 기본 데이터가 필터링됩니다.
  1. SELECT 최종 데이터가 반환됩니다.
  1. ORDER BY - 최종 데이터가 정렬됩니다.
  1. LIMIT 반환된 데이터는 행 수로 제한됩니다.
    1. notion image

5. 결과 반환 (Result Return)

쿼리 실행이 완료되면, 결과가 클라이언트에게 반환됩니다.
 
 
Loading...