공부하는가비

[SQLD] SQL최적화의 기본 원리 요약 본문

낰낰/자격증

[SQLD] SQL최적화의 기본 원리 요약

가비코코보리 2021. 11. 17. 08:49

목차

1. 옵티마이저실행계획

2. 인덱스기본

3. 조인수행원리

 

1.옵티마이저 실행계획 

규칙기반옵티마이저 비용기반옵티마이저
- 우선순위를 가지고 실행계획생성
- 비교적 쉽게예측가능
- 인덱스유무,SQL연산자 또는 객체
- 인덱스를 이용한 엑세스 방식이 테이블 엑세스 방식보다 순위가 높다
-조인시 조인컬럼 인덱스 유무 중요
-우선순위 가장 높은것 (single row by rowid) : 로우아이디로 다른행 참조하지않고 하나의행 엑세스하는 가장 빠른 방법

- 비용(소요시간,자원)이 가장 적게드는 SQL실행
- 테이블,인덱스,컬럼 다양한객체 통계정보 사용
- 실행계획의 예측 및 제어가 어렵다
①질의변환기:SQL문 용이한 형태로변환
②대한계획: 다양한 대안계획생성,연산의 적용순서 변경,연산방법변경 (대안이 많아지면 수행시간 길어지므로 대안계획수 제한) 
③비용예측기:집합의크기,분포도예측

 

*실행계획 

SQL에서 요구한 사항을 처리하기 위한 절차와 방법

어떠한 순서로 실행할지를 결정하는 작업

각 처리방법마다 실행시간이 다를 수 있다. 

옵티마이저는 최적의 실행계획을생성해준다.

조인순서, 조인기법, 엑세스기법, 최적화정보, 연산, 질의처리 예상비용

 

*인덱스

테이블기반으로 선택적으로 생성

검색성능 최적화 목적으로 INSERT, DELETE 속도가 느려질 수 있다. (UPDATE 부하가 없다)

컬럼의 순서는 SQL실행 성능과 관계있다. 

 

-트리기반 인덱스

Root, Brench(분기목적), leaf-block으로 구성

-CLUSTERED

인덱스키 컬럼순 정렬, 리프페이지가 곧 데이터페이지

-BITMAP

하나의 인덱스키 엔트리가 많은 포인터 가짐 

 

*전체 테이블스캔 

-SQL에 조건이 존재하지 않는경우

-SQL에 사용가능한 인덱스가 존재하지 않는경우

-옵티마이저의 취사선택

-병렬처리방식인경우 

 

*인덱스스캔

-인덱스 유일 스캔 : 유일인덱스로 단 하나 추출 (중복X)

-인덱스 범위 스캔 : '=' 이 주어지지않은경우 결과가 없으면 한건도 반환하지 않을 수 있다

-인덱스 역순 스캔 : 최대값 쉽게 찾을 수 있다. 내림차순으로 데이터 읽는다. 

 

*조인 수행 원리

① NL JOIN 

-중첩반복문과 유사하게 수행

-처리범위 좁음 (소량조인)

-랜덤 엑세스 방식

 

② Sort JOIN

-넓은 범위 데이터 처리

-동등조인, 비동등 조인 가능

-정렬작업 부담 

-스캔방식

 

③ Hash JOIN

-CPU작업위주 처리

-NL조인의 랜덤엑세스 , Sort 조인의 정렬작업 부담 보완

 

Comments