ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 옵티마이저
    DB 2024. 3. 27. 17:54

    SQL을 가장 빠르고 효율적으로 수행할 최적의 실행계획을 생성해주는 DB 엔진 내부에 있는 기능

     

     옵티마이저가 생성한 SQL 처리 실행계획을 Execution Plan이라고 함

     


    [옵티마이저 수행 과정]

     

    1. 사용자가 던진 SQL 쿼리를 위한 후보 실행계획을 찾음

    2. 데이터 딕셔너리에 미리 수집해놓은 통계 정보를 통해 각 실행계획의 예상 비용을 산정함

    3. 각 실행계획을 비교하여 최저비용을 갖는 하나를 선택함

    4. 해당 계획으로 SQL문을 처리함

     

    어떤 인덱스를 사용할지

    어떤 조인 순서를 적용할지

    어떤 스캔 방법을 사용할지

     

    사용자가 준 SQL문 그대로가 아닌

    자기가 판단하에 쿼리 실행계획을 수립함


    [옵티마이저 종류]

     

    1. 규칙 기반 옵티마이저

    실행속도가 빠른 순으로 결정

     

    2. 비용 기반 옵티마이저

    비용/리소스가 최소한으로 나온 순으로 결정

    CPU 속도, I/O 속도등을 고려함

     


    [옵티마이저의 JOIN 실행 계획]

     

    자 봐봐. 쿼리문에서 순서가 JOIN 이후 WHERE인데,
    실제로 옵티마이저는 JOIN을 먼저 전부 다 하고 WHERE 절로 가는게 아니라,일단 JOIN 할 테이블들을 모두 가져온 다음에
    WHERE절을 통해 최대한 최적으로 JOIN 할 수 있는 방법을 찾기 위해 인덱스 같은 것을 고려해서
    특정 테이블을 WHERE 절로 추린다음에 그 다음에 실제 JOIN을 통한 테이블 병합을 진행할 수 도 있다는거지???

     

    네 맞습니다!!

     

    1. JOIN을 먼저 모두 하고 WHERE절을 나중에 적용하는 것이 아니라, 옵티마이저는 WHERE 절을 통해 불필요한 데이터를 먼저 필터링한 후 최적의 방식으로 JOIN을 진행합니다.

    2. 옵티마이저는 JOIN과 WHERE 절을 함께 고려하여 실행 계획을 최적화합니다. 특히, WHERE 절에서 인덱스를 활용할 수 있으면 먼저 해당 조건을 필터링한 후, JOIN 연산을 진행할 수 있습니다.

    3. 인덱스는 주로 WHERE 절에서 필터링과 JOIN 최적화에 중요한 역할을 하며, 옵티마이저는 이를 기반으로 최적의 실행 계획을 세웁니다.

     

    옵티마이저는 JOIN과 WHERE을 처리하는 순서를 단순히 코드 순서대로 실행하는 것이 아니라, 여러 전략을 통해 최적의 실행 계획을 세우며 인덱스나 조건을 활용해 필요한 데이터를 먼저 필터링하고 그 후에 JOIN을 진행할 수 있습니다.

    'DB' 카테고리의 다른 글

    정규화 역정규화  (0) 2024.06.07
    스케일인 스케일아웃  (0) 2024.03.29
    데이터베이스 엔진  (0) 2024.03.03
    RDBMS vs NoSQL  (0) 2024.03.01
    DB 서버 vs DBMS vs DB 엔진  (0) 2023.10.13