ㅁ옵티마이저(Optimizer): SQL 쿼리를 가장 효율적으로 실행하기 위한 실행 계획(Execution Plan)을 선택하는 DBMS의 내부 컴포넌트
즉, 다음과 같은 질문에 답하기 위한 내부 판단 시스템이다
- 어떤 인덱스를 사용할까?
- 테이블 조인은 어떤 순서로 할까?
- 풀 테이블 스캔이 더 나을까, 인덱스 스캔이 더 나을까?
(옵티마이저 종류 2가지)
- 규칙 기반 옵티마이저(Rule-Based Optimizer, RBO)
정해진 규칙에 따라 실행 계획을 선택한다. 예를 들어, 인덱스가 있으면 무조건 인덱스를 사용하는 식이다. 단순하고 예측 가능하지만, 다양한 상황에 유연하게 대응하지 못한다는 단점이 있다. - 비용 기반 옵티마이저(Cost-Based Optimizer, CBO)
테이블의 행 수, 인덱스 유무, 통계 정보 등을 바탕으로 각 실행 계획의 비용을 계산하여 가장 효율적인 경로를 선택한다. 현재 대부분의 RDBMS는 CBO를 채택하고 있다.
그러면 여기서 실행 계획(Execution Plan)이란 무엇일까?
옵티마이저가 선택한 실행 계획은 EXPLAIN 키워드를 통해 확인할 수 있다. 이를 통해 쿼리가 어떤 방식으로 처리되는지, 인덱스가 사용되는지 여부, 조인 순서 등을 파악할 수 있으며, 성능 튜닝에 있어 매우 중요한 자료가 된다.
힌트(Hint)란?
힌트는 쿼리 실행 시 옵티마이저에게 특정 실행 계획을 강제하거나 유도하기 위해 사용되는 지시어이다
쉽게 말하면, "이 인덱스를 꼭 써줘!", "먼저 이 테이블부터 조인해줘!"와 같은 개발자의 의도를 명시적으로 전달하는 방법이다
[DBMS별 힌트 지원 여부 및 특징]
특히 오라클의 옵티마이저와 힌트는 특히 정교하고 고도화되어 있어 많이 언급되는 편이다.
오라클에서의 옵티마이저 실행 계획(Execution Plan)과 힌트 사용 방법은 아래 글을 참고하자
[Oracle] 온라인 쇼핑몰 DB: JOIN/INDEX 실습
https://claremont.tistory.com/entry/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-SQL-JOIN-INDEX-%EA%B0%9C%EB%85%90 [데이터베이스] SQL JOIN + INDEX 개념평소에 SKALA 팀원분들과 얘기를 할 때 컴공식 유머를 발휘하는데,
claremont.tistory.com
힌트 사용 시 유의사항
힌트는 성능 문제를 해결할 수 있는 강력한 도구이지만, 무분별하게 사용할 경우 오히려 성능을 저하시키거나 유지보수를 어렵게 만들 수 있다. 특히 데이터 분포가 바뀌거나 인덱스 구조가 변경될 경우, 이전에 유효했던 힌트가 오히려 병목을 유발할 수도 있다. 따라서 힌트는 다음과 같은 상황에서 신중하게 적용하는 것이 바람직하다.
1. 옵티마이저가 잘못된 실행 계획을 반복적으로 선택하는 경우
2. 쿼리 성능이 미션 크리티컬(Mission-Critical)한 수준일 경우
3. 실행 계획을 강제로 고정해야 하는 경우 (예: 대량 배치 처리)
#SK, #SKALA, #SKALA1기
'DBMS > 데이터베이스' 카테고리의 다른 글
[데이터베이스] SQL 튜닝 체크리스트(실전 팁) (0) | 2025.04.18 |
---|---|
[데이터베이스] DBMS → Data Warehouse → Data Mining 흐름 이해 (2) | 2025.04.15 |
[데이터베이스] SQL 연습문제 (0) | 2025.02.06 |
[데이터베이스] SQL JOIN + INDEX 개념 (0) | 2025.02.06 |
[데이터베이스] 트랜잭션 개념과 관리 방안 수립 (0) | 2025.02.06 |