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 등)는 비용 기반 옵티마이저를 사용한다.