함께하는 데이터 분석

[SQLD] SQLD 최적화 기본 원리 본문

자격증 준비/SQLD

[SQLD] SQLD 최적화 기본 원리

JEONGHEON 2022. 8. 10. 21:55

안녕하세요!

 

오늘은 SQL 최적화 기본 원리에 해당하는 부분을 정리해볼게요.

 

 

CBO(Cost Based Optimizer) 

테이블 및 인덱스 등의 통계 정보를 활용하여 소요될 처리시간 등을 계산하여

가장 효율적일 것으로 예상되는 실행계획을 선택하는 옵티마이저

 

 

실행계획

알 수 있는 정보 

1) 액세스 기법

2) 질의 처리 예상 비용

3) 조인 순서

 

설명

1) 실행계획은 SQL 처리를 위한 실행 절차와 방법을 표현한 것

2) 실행계획은 조인 방법, 조인 순서, 액세스 기법 등이 표현됨

3) 동일 SQL문에 대해 실행계획이 다르면 실행 결과도 같음

4) CBO의 실행계획에는 단계별 예상 비용 및 건수 등이 표시

 

 

인덱스

1) 기본 인덱스(Primary key)에 중복된 키 값들이 나타날 수 없음

2) 기본 인덱스(Primary key)에 NULL이 나타날 수 없음

3) 테이블 전체 데이터를 읽는 경우는 인덱스가 거의 불필요

4) 인덱스는 조회 연산 속도를 향상 시킴

5) 규칙 기반 옵티마이저는 적절한 인덱스가 존재하면 항상 인덱스를 사용

6) 인덱스 범위 스캔은 결과가 없으면 한 건도 반환하지 않을 수 있음

7) DML 처리 성능을 저하시킬 수도 있음

 

 

NL Join(Nested Loop Join)

1) 조인 칼럼에 적당한 인덱스가 있어서 자연 조인(Natural Join)이 효율적일 때 유용

2) Driving Table의 조인 데이터 양이 큰 영향을 주는 조인 방식

3) 유니크 인덱스를 활용하여 수행 시간이 적게 걸리는 소량 테이블을 온라인 조회하는 경우 유용

 

 

SM Join(Sort Merge Join)

1) 조인 칼럼에 적당한 인덱스가 없어서 NL 조인이 비효율적일 때 유용

2) Driving Table의 개념이 중요하지 않은 조인 방식

3) 조인 조건의 인덱스의 유무에 영향받지 않음

 

 

Hashing Join

1) EQUI(=) 조인 조건에서만 동작

2) 조인 칼럼에 적당한 인덱스가 없어서 자연 조인(Natural Join)이 비효율적일 때 유용

3) 자연조인(Natural Join) 시 드라이빙(Driving) 집합 쪽으로 조인 액세스량이 많아 Random 액세스 부하가 심할 때

4) 소트 머지 조인(Sort Merge Join)을 하기에는 두 테이블이 너무 커서 소트(Sort) 부하가 심할 때