▏시작하는 말
회사에서 업무를 하면서 한 업체에서 문의가 왔다. DB 툴에서 쿼리문을 수행했을 땐 정상적으로 빠르게 데이터를 가지고 오는데 was서버 화면단에서 서비스 조회 시 2분가량의 로딩 이슈 문의였다.
우리 측 서버 문제가 아닌, db query의 효율 문제이다. 같은 쿼리 문이더라도 디비 툴에서는 자체적인 옵티마이저가 실행되어 빠르게 된 것이다. 오늘은 그 개념인 옵티마이저를 설명해보겠다.
* 혼자 공부하기 위해 워드에 작성해둔 내용으로 추후에 블로그에 맞게 수정하겠습니다. *
▏옵티마이저
옵티마이저 란 ?
개발자가 sql을 작성하여 실행하면, 소프트웨어의 실행파일처럼 즉시 실행 되는 것이 아니라, 옵티마이저는 이 쿼리문을 어떤 방법으로 실행시킬지 여러가지 실행계획(explain plan)을 세운다.
동일한 결과로 출력되는 sql도 실행하는 방법에 따라 성능이 달라지기 때문에, sql 성능에 있어 옵티마이저는 아주 중요한 역할을 한다.
옵티마이저 특징 ?
RBO – 규칙기반 옵티마이저(Rule Based Optimizer)
실행속도가 빠른 순으로 규칙을 세워두고 우선순위가 앞서는 방법을 채택
단점ex ) 테이블에 데이터가 몇 개 없을 경우, 전체조회를 할 때 full table scan 이 더 빠름에도
불구하고 index를 확인하고 타는 등 비효율적인 실행계획이 도출 될 수 있다.
CBO – 비용기반 옵티마이저(Cost Based Optimizer)
RBO의 무조건적인 규칙에 따른 비현실성 실행의 단점을 극복하기 위해 만들어진 것으로,
실행계획을 최대 2천개까지 세운 뒤 비용이 최소한으로 나온 실행 계획을 수행한다.
여기서 비용이란, 쿼리 수행 시 소요 일 량, 시간을 의미한다.
옵티마이저의 실행 방법 ?
1. Sql 을 실행하면 파싱하여 sql의 문법 검사 및 구문 분석
2. 옵티마이저가 규칙 기반 혹은 비용 기반으로 실행계획 수립
3. 최종적으로 sql문 실행 후 데이터 인출(Fetch)
우선순위 설명
1 ROWID를 사용한 단일 행인 경우
2 클러스터 조인에 의한 단일 행인 경우
3 유일하거나 기본키(Primary Key)를 가진 해시 클러스터 키에 의한 단일 행인 경우
4 유일하거나 기본키(Primary Key)에 의한 단일 행인 경우
5 클러스터 조인인 경우
6 해시 클러스터 조인인 경우
7 인덱스 클러스터 키인 경우
8 복합 칼럼 인덱스인 경우
9 단일 칼럼 인덱스인 경우
10 인덱스가 구성된 칼럼에서 제한된 범위를 검색하는 경우
11 인덱스가 구성된 칼럼에서 무제한 범위를 검색하는 경우
12 정렬-병합(Sort-Merge) 조인인 경우
13 인덱스가 구성된 칼럼에서 MAX 혹은 MIN을 구하는 경우
14 인덱스가 구성된 칼럼에서 ORDER BY를 실행하는 경우
15 전체 테이블을 스캔(FULL TABLE SCAN)하는 경우
▏참고자료
- 정보처리기사
- https://velog.io/@yewon-july/Optimizer
실행계획(Explain plan) 이 궁굼하다면 ? "실행계획(Explain plan) 그것이 알고싶다. << 클릭
'Algorithm > DataBase' 카테고리의 다른 글
리눅스 mysql DB , table 백업 및 복원하기 (0) | 2022.03.29 |
---|---|
실행계획(Explain Plan) 이란? (0) | 2022.02.03 |
[CentOS 7] MySQL 설치하기 (2) | 2021.11.02 |
MySQL에 엑셀(.csv) 데이터 넣기 (2) | 2021.06.28 |
댓글