조인
NL 조인
- 랜덤 액세스 위주의 조인
- 한레코드씩 순차적으로 진행
- 테이블의 크기가 작을수록 좋음
- 온라인 프로그램에서 사용할 때 좋음
- Driving 테이블의 크기가 가장 많은 영향을 준다.
SMJ
- 조인하기전에 정렬
- 넓은 데이터 처리에 유리함
- 정렬에 필요한 데이터가 많아지면 메모리대신 디스크를 사용하므로 성능이 떨어질 수 있음
- 조인 조건의 인덱스 유무에 영향을 받지 않지만 Sort 가 필요하다.
Hash 조인
- 한쪽 테이블의 크기가 작을수록 좋음
- NL의 랜덤액세스, SMJ의 정렬작업에 대한 부담으로 등장
- 인덱스를 사용하지 않음, 인덱스 대신 Hash 함수를 사용
- 동등조인(=) 에서만 사용
- 수행 빈도가 높은 OLTP성 작업에서는 불리함
- 수행 빈도가 낮고, 쿼리 수행시간이 오래 걸리는, 대용량 테이블 조인 작업에 유리함(DW, OLAP성 쿼리)
파티션
Range 파티션
- 파티션 키 값의 범위로 분할 파티셔닝의 가장 일반적인 형태
Hash 파티션
- 파티션 키 값에 해시 함수를 적용하고, 거기서 반환된 값으로 파티션 매핑 데이터가 모든 파티션에 고르게 분산되도록 DBMS가 관리
- 저장되는 위치 알 수 없음
- 병렬처리시 성능 극대화
- DML 경합 분산에 효과적
- 파티션 키의 데이터 분포가 고른 컬럼이어야 효과적
List 파티션
- 불연속적인 값의 목록을 각 파티션에 지정순서와 상관없이, 사용자가 미리 정한 그룹핑 기준에 따라 데이터를 분할 저장
Composite 파티셔닝
- Range, List 파티션 내에 또 다른 서브파티션 구성
힌트
테이블의 alias 가 있는 상황이면 반드시 alias를 사용해야 한다.
leading
- 테이블 조인 순서를 지정
push_subq
- 조인보다 서브쿼리 필터링을 먼저 처리하도록 지시
odered
- From 절에 나열된 순서대로 조인을 수행하도록 지시
driving_site
- 분산 DB 환경에서 어느쪽 서버가 쿼리를 처리할지 지정하는 힌트
push_pred
- 외부 조건이 뷰내부로 침투하여 수행되도록 하는 힌트
swap_join_inputs
- ordered 힌트를 무시하고 해당 테이블의 순서를 변경할 수 있는 힌트
사용예)
ordered use_nl(B)
leading(A) use_nl(B)
클러스터링 팩터
인덱스 클러스터링 팩터
- 데이터가 모여 있는 정도를 말한다.
- 클러스터링 팩터를 좋게 하려면 테이블을 재생성 해야 한다.
- 인덱스 클러스터링 팩터가 좋을 수록 물리적인 I/O, 논리적인 I/O 가 적게 발생한다.
Oracle vs SQL server
- Log Buffer = Log Cache
- Online Redo Log = Transaction Log
- Database Writer = LazyWriter
- Program Global Area(Oracle) : 프로세스에 종속적인 고유데이터를 저장해두는 메모리 공곤
- Procedure Cache(SQL) : SQL과 실행계획, 저장형 함수/프로시저를 캐싱해 두는 메모리 공간
바인드 변수
- 바인드 변수를 사용해도 칼럼 히스토그램을 제외한 나머지 통계정보는 활용 할 수 있다.
- 바인드 변수 Peeking(Parameter Sniffing) 기능은 부작용이 많아 사용을 꺼린다.
- 파티션 테이블을 쿼리할 때 파티션 키 칼럼을 바인드 변수로 조회하면 옵티마이저가 파티션 레벨 통게를 활용하지 못한다.
- 바인드 변수를 사용하면 옵티마이저는 평균 분포를 가정한 실행계획을 수립한다.
인덱스
- 인덱스는 기본적으로 오름차순으로 정렬된다.
- order 칼럼 중 일부만 내림차순일 때는 인덱스로 정렬을 대체할 수 없다.
- desc 정렬은 인덱스로 대체 불가
- 인덱스 뒤쪽 칼럼이 order by 절에 사용된 경우, 그 앞쪽 인덱스 칼럼이 모두 '=' 조건이어야 정렬을 대체할 수 있다.
- select * from (select * from t1 order by c1, c2, c3) where rownum <= 1;
select * from t1 order by c1, c2, c3;
- select * from t1 where c1 = ? order by c2;
야간에 단독으로 DML을 수행하는 대용량 배치 프로그램의 속도를 향상시키고자 할 때 고려할 만한 튜닝 방안
- 인덱스를 제거했다가 나중에 다시 생성
- 수정 가능 조인뷰나 머지문을 활용
- SQL 서버라면 최소 로깅 모드로 Insert 기능 활용
* 오라클의 nologging 모드는 insert 문에서만 사용가능,
'데이타베이스 > SQLD' 카테고리의 다른 글
[SQLD] 2015.09.05 18회 SQLD 시험 후기 (2) | 2015.09.08 |
---|---|
[SQLD] SQLD 공부를 위한 참고 자료 및 사이트 (0) | 2015.08.21 |
[개념] 뷰머징 (0) | 2015.08.21 |
SQLD 자격증 정보 (0) | 2015.07.23 |