DB

[DB] 옵티마이저 동작 방식

쌈뽕코딩 2025. 5. 19. 19:57

🤔 DB 옵티마이저란?

DB 옵티마이저는 SQL 쿼리를 가장 효율적으로 실행할 실행 계획 (Execution Plan)을 선택하는 역할을 한다.
이걸 선택하는 방식에는 두 가지가 있다.

 

규칙 기반 옵티마이저 (Rule-Based Optimizer, RBO)

데이터 통계 정보 를 고려하지 않고, 정해진 규칙(rule)을 기반으로 실행 계획을 선택합니다.

 

예시

  • 인덱스가 있으면 무조건 인덱스를 사용한다
  • 조인 순서는 항상 왼쪽부터 처리

특징

  • 예측 가능하고 단순함
  • 데이터 양이 많아지면 비효율적인 계획이 나올 수 있다.
  • 실제 상황에 맞는 유연한 선택을 못한다.

 

비용 기반 옵티마이저 (Cost-Based Optimizer, CBO)

  • 각 실행 계획마다 예상 비용(cost)을 계산해서 가장 저렴한 걸 선택합니다.
  • 통계 정보 (행 수, 컬럼 분포, 인덱스 유무 등)를 기반으로 판단

🤔 비용이란? 

→ 읽는 행의 수, 디스크 I/O, CPU 사용량 등

 

특징

  • 상황에 맞게 최적의 계획을 선택할 수 있음
  • 대용량 데이터 처리에 유리
  • 통계 정보가 부정확하면 잘못된 판단을 할 수도 있음
  • 계획 수립 시간이 오래 걸릴 수 있음
  • 대부분의 현대적인 RDBMS (MySQL, PostgreSQL, Oracle 등)는 비용 기반 옵티마이저를 사용한다.