빅데이터 전문가 되기

[2과목] SQL 최적화 기본 원리 본문

자격증공부/SQLD

[2과목] SQL 최적화 기본 원리

지야소이 2023. 9. 3. 14:54

😸 옵티마이저 

- SQL의 실행 방법인 실행계획을 생성하는 데이터 베이스 엔진

- 사용자 SQL문에 대해 최적의 실행 방법을 결정하며 SQL 실행 속도에 가장 큰 영향을 미침

- 옵티마이저는 SQL을 입력 받아 규칙 기반 혹은 비용 기반으로 실행계획을 출력

 

  • 규칙 기반 옵티마이저(RBO)

- 정의된 SQL 규칙의 우선순위로 실행계획을 생성하는 방식

- 사용 가능한 인덱스의 유무와 연산자 종류 등을 참조해서 실행계획을 생성

 

  • 비용 기반 옵티마이저(CBO)

- 통계 정보를 활용하여 SQL 처리 시간 및 자원 사용량 등을 계산하고 가장 효율적인 실행계획을 생성하는 방식

- 데이터 건수를 예측하지 못하는 RBO의 단점을 개선하기 위해 사용

- 통계 정보가 없는 경우 불확실한 실행계획을 생성할 수 있으므로 최신화된 통계 정보를 유지하는 것이 중요

 

1) 비용 계산 원리

- 선택도 : 1/ NDV(중복 제거한 값의 개수)

- 카디널리티 : 총 로우수 * 선택도 = 총 로우수 / NDV

- 히스토그램 : 컬럼 값의 빈도수를 저장

 

 

👉 인덱스

- 데이터베이스에 저장된 데이터를 빠르게 조회하기 위해서 테이블에 연관된 정보를 독립적인 저장 공간에 저장한 객체

- 테이블의 특정 레코드 위치를 알려주는 용도로 사용하며 인덱스를 구성하는 컬럼의 정렬 순서에 따라 정렬

- 관계형 데이터베이스에서 가장 많이 사용되는 인덱스는 B-트리

- Oracle에서 물리적인 주소 정보러써, 내부적으로 ROWID를 사용

- 인덱스는 조회, 삽입, 삭제, 갱신 연산의 속도를 저하시킴

- 대량의 데이터를 삽입 시 모든 인덱스를 생성 후 데이터를 입력하는 것이 좋음

- SQL Server의 클러스터형 인덱스는 ORACLE의 IOT와 매우 유사

 

1) B-트리 인덱스

- 루트 블록부터 리프 블록까지 거리가 일정한 트리 구조를 가진 인덱스

- 루트 블록, 브랜치 블록, 리프 블록으로 구성되고, 리프 블록에는 테이블 데이터에 대한 ROWID가 저장

- 리프 블록은 양방향 링크를 가지고 있어, 오름차순과 내림차순 검색을 쉽게 할 수 있음

- 일치 및 범위 검색에 적절한 구조

- OLTP 환경에서 적합

 

2) 비트맵 인덱스

- 비트를 이용해서 컬럼 값을 저장하고 비트맵을 구성하는 인덱스

- 인덱스의 리프 노드는 ROWID 대신 킷값에 대한 비트맵으로 저장

- 컬럼의 Distinct Value 개수가 적을 때 사용하면 저장 효율이 높음

- Lock에 의한 DML 부하가 심해서 OLTP 환경에서 사용하기 어려움

- 읽기 위주의 대용량 DW, OLAP 환경에 적합

'자격증공부 > SQLD' 카테고리의 다른 글

[2과목] SQL 활용  (0) 2023.09.01
[2과목] SQL 기본  (0) 2023.08.30
[1과목] 데이터 모델과 성능  (0) 2023.08.29
[1과목] 데이터 모델링의 이해  (0) 2023.08.28
SQL 개발자 자격시험  (0) 2023.08.24
Comments