> For the complete documentation index, see [llms.txt](https://real-dev.gitbook.io/real-library/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://real-dev.gitbook.io/real-library/sql-tuning/readme/7.-sql-1.md).

# 7. SQL 옵티마이저 통계 비용

* 선택도
  * 컬럼 값 종류 개수 (NDV, Number of Dinstinct Value)
* 카디널리티

  * 전체 레코드 중 조건절에 의 해 선택되는 레코드 개수

  <br>

상품 분류 컬럼에 가전 의류 식음료 생활용품. 이렇게 4개의 값만 있으며 총 10만 건의 레코드가 존재한다면 , WHERE 상품 분류 = ‘가전’ 조건이 주어질 때 해당 케이스의 선택도는 25%, 카디널리티는 25,000이 된다.

<br>

옵티마이저는 카디널리티를 구하고 데이터를 액세스 하는 비용을 계산해 테이블 액세스 방식, 조인 순서, 조인 방식을 결정한다.

<br>

#### 통계 정보

1. 테이블 통계
2. 인덱스 통계
3. 컬럼 통계

<br>

#### 옵티마이저에 영향을 미치는 요소

1. SQL과 연산자 형태
2. 인덱스, IOT, 클러스터, 파티션, MV 등 옵티마이징 팩터
3. 제약 설정
4. 통계 정보
5. 옵티마이저 힌트
6. 옵티마이저 관련 파라미터

<br>

옵티마이저는 일종의 네비게이션이다. 잘 만드려고 하지만 사실 불완전한 부분도 많기에 개발자는 옵티마이저를 보조 시스템으로 인식하고, 책임 일부를 위임한다고 생각해야한다.

#### 개발자가 고기능성 DB를 구축하기 위해 해야할 일

* 필요한 최소 블록만 읽도록 쿼리를 작성한다.
* 최적의 옵티마이징 팩터를 제공한다.
  * 전략적인 인덱스 구성
  * 인덱스 외의 파티션, 클러스터, IOT 등 다양한 기능 활용
  * 옵티마이저 모드 설정
  * 정확하고 안정적인 통계정보
* 필요하다면 옵티마이저 힌트들 사용해 최적의 액세스를 유도한다.
