ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 쿼리의 동작 과정
    CS/DB 2024. 11. 23. 22:45
    반응형

     

    SQL 실행 과정의 중요성

    이전에 SQL문의 실행순서를 정리했는데, 해당 순서는 논리적 순서일뿐 실제 쿼리 순서와는 약간의 차이가 있다.

    예를들면 order by 절이 select 보다 먼저 실행되는데 실제 쿼리 작성시 select에 포함되지 않은 컬럼으로 order by를 실행해도 정상적으로 정렬되는것이 그 예이다.

    이번에는 실제 물리적으로 어떻게 작동하는지 정리해본다.

    SQL 쿼리 실행 단계

    1. 파싱 (Parsing)

    • 문법 확인: SQL 문법에 오류가 있는지 확인
    • Syntax Tree 생성: 쿼리를 구문 트리(Syntax Tree)로 변환
    • 객체 확인: 테이블, 컬럼, 함수 등의 존재 여부와 사용 권한 점검

    2. 바인딩 (Binding)

    • 데이터 타입 확인: 테이블과 컬럼의 데이터 타입을 분석
    • 스키마 대조: 데이터베이스 스키마와 대조하여 쿼리가 정확히 작성되었는지 검증
    • 오류 감지: 예를 들어, 숫자 타입 컬럼에 문자열을 삽입하려는 경우 오류가 발생

    3. 최적화 (Optimization)

    1. 조인 순서 결정: 여러 테이블 간의 조인 순서를 최적화하며, 데이터 크기와 조인 조건에 따라 순서를 만든다.
    2. 인덱스 사용 여부 판단: 테이블 스캔(Full Table Scan)과 인덱스 스캔(Index Scan) 중 효율적인 방식을 선택한다.

    4. 실행 계획 생성 (Plan Generation)

    위의 최적화 과정에서 도출된 논리적 실행 계획을 물리적 실행 계획으로 변환한다.

    물리적 연산자 결정

    • 테이블 스캔: 테이블의 모든 데이터 읽기
    • 인덱스 스캔: 특정 컬럼의 인덱스를 사용해 데이터 읽기
    • 조인 연산: 다양한 조인 알고리즘(Nested Loop, Hash Join 등) 결정

    5. 데이터 액세스 (Data Access)

    데이터베이스에서 실제로 데이터를 읽음

    • Full Table Scan: 전체 테이블을 읽는 방식.
    • Index Scan: 인덱스를 활용하여 필요한 데이터를 검색.
    • Index Seek: 인덱스를 통해 특정 범위의 데이터만 검색.
    • Row ID Lookup: 인덱스에서 식별된 Row ID를 이용해 데이터를 조회.

    6. 필터링 (Filtering)

    WHERE 절 조건을 기반으로 데이터 필터링

    • 이 과정에서 가능한 한 초기 단계에서 필터링을 수행하여 처리해야 할 데이터 양을 줄임

    7. 조인 (Join)

    8. 그룹화 및 집계 (Grouping and Aggregation)

    GROUP BY와 HAVING 절을 처리

    • 특정 컬럼을 기준으로 데이터를 그룹화하고, SUM, COUNT, AVG 등의 집계 연산을 수행

    9. 정렬 (Sorting)

    ORDER BY 절에 따라 데이터를 정렬

    • 데이터가 정렬되지 않은 경우, 추가적인 정렬 연산(Sort Operation)이 발생..

    10. 결과 생성 및 반환 (Result Generation)

    최종적으로 SELECT 절에서 지정한 컬럼과 데이터를 반환

    • LIMIT이나 OFFSET 절이 포함된 경우, 결과를 적절히 잘라내어 반환

    결론

    SQL 쿼리의 실행 순서는 우리가 작성한 순서와 다르게 진행되며 이를 이해하지 못하면 비효율적인 쿼리를 작성하거나 예상치 못한 결과를 얻을 수 있다.

     

     

    반응형

    'CS > DB' 카테고리의 다른 글

    SQL 논리적 실행 순서  (2) 2024.11.15
    SQL문 정리  (0) 2023.02.23
    DBMS  (0) 2023.02.20
Designed by Tistory.