옵티마이저는SQL을 빠르고 효율적으로 수행할 최적의 처리 경로를 생성해주는 DBMS 내부의 핵심 엔진이다.
옵티마이저는 데이터베이스 시스템이 효율적이고, 최적의 성능으로 동작하게 한다.
옵티마이저가 가끔 비효율적으로 실행계획을 구성 할 수가 있는데, 사용자는 힌트를 줌으로써 실행 계획을 변경 할 수 있다.
SELECT /*+ FIRST_ROWS */ *
FROM test
WHERE id = '10';
힌트사용법이나 구문은 따로 찾아보기..!
실행계획을 확인하기위해서는 조회 쿼리앞에 explain을 붙여주면된다.
ex) explain select * from test
옵티마이저 튜닝시 인덱스를 줄 때는 카디널리티가 높은 칼럼에 인덱스를 할당해야한다.
즉, unique 하거나 PK에 걸어주는것이 가장 이상적이다.
단, 데이터가 수십만건정도로 많을떄만 걸어주자. 아니면 역효과가난다.
테이블에 대한 검색 속도를 높여주는 자료구조.
대부분의 쿼리성능저하는 조회에서 생기므로, 조회하기 편하도록 목차를 생성하는 개념이다.
인덱스를 생성하면, 해당 컬럼의 데이터들을 별도로 정렬하여 메모리공간에 물리적 주소와 함께 저장됨. -> DB의 약 10%저장공간을 추가로 필요로한다.
생성된 인덱스를 통해 옵티마이저가 판단하여 검색속도를 향상시키는 효과를 가져올 수 있다.
인덱스는 여러 종류가 있지만, B-tree(Balanced Tree)가 가장 대표적이다.
B-tree : 양쪽 자식 노드 수의 밸런스를 유지하는 트리. 탐색 시간에 매우 효율적이나, update, insert, delete등 데이터의 변경이 발생 할 때마다 트리의 재정렬이 필요하다.
따라서, 조건절에 자주 사용되는, 카디널리티가 높은(unique하거나 PK), 데이터가 많은 테이블에 Index를 걸어줘야한다.