데이터 입출력 애플리케이션의 성능 향상을 위해 SQL 코드를 최적화하는 것
쿼리 성능 최적화 전에 성능 측정 도구인 APM을 사용하여 최적화 할 쿼리를 선정
최적화 대상 쿼리에 대해 옵티마이저가 수립한 실행 계획을 검토하고 SQL 코드와 인덱스 재구성
옵티마이저는 작성된 sql이 가장 효율적으로 수행되도록 최적의 경로를 찾아 주는 모듈이다.
옵티마이저 종류
RBO와 CBO의 차이점
구분 | RBO | CBO |
---|---|---|
최적화 기준 | 규칙에 정의된 우선순위 | 액세스 비용 |
성능 기준 | 개발자의 sql 숙련도 | 옵티마이저의 예측 성능 |
특징 | 실행 계획 예층 어려움 | 성능 통계치 정보 활용, 예측이 복잡함 |
고려사항 | 개발자의 규칙 이해도, 규칙의 효율성 | 비용 산출 공식의 정확성 |
DBMS의 옵티마이저가 수립한 SQL 코드의 실행 절차와 방법을 의미
EXPLAIN 명령어를 통해 그래픽이나 텍스트로 표현 되는 실행 계획 확인 가능
실행 계획에는 요구사항들을 처리하기 위한 연산 순서가 적혀 있고, 연산에는 조인, 테이블 검색, 필터, 정렬 등이 있다.
실행 계획에 표시된 연산 순서, 조인 방식, 테이블 조회 방법 등을 참고하여 SQL문이 더 빠르고 효율적으로 작동하도록 SQL 코드와 인덱스를 재구성하는 것
WHERE 절을 추가하여 일부 레코드만 조회하게 함으로써 조회에 들어가는 비욜 절감
WHERE 절에 연산자가 포함되면 INDEX를 활용하지 못하므로 가능한 연산자 사용 자제
서브 쿼리에 특정 데이터가 존재하는지 확인할 때는 IN보다 EXISTS 활용
옵티마이저의 실행 계획이 잘못되었다고 판단되는 경우, Hint를 활용하여 실행 계획의 액세스 경로 및 조인 순서를 변경
SQL 코드에서 조회되는 속성과 조건들을 고려하여 인덱스 구성
실행 계획을 참고하여 인덱스를 추가하거나 기존 인덱스의 순서 변경
인덱스의 추가 및 변경은 해당 테이블을 참조하는 다른 SQL문에도 영향을 주기 때문에 신중히 결정
단일 인덱스로 쓰거나 수정 없이 읽기로만 사용되는 테이블의 경우 IOT(Index-Organized Table)로 구성하는 것을 고려
IOT : 인덱스가 있는 테이블을 조회할 때, 인덱스를 검색하여 주소를 얻고 주소를 다시 찾는 과정을 거치는데, IOT는 인덱스 안에 테이블 데이터를 직접 삽입하여 저장하기 때문에 주소 얻는 과정을 생략하여 빠른 조회 가능