본문 바로가기
데이타베이스/SQLD

[SQLD] SQLD & SQLP 정리

by hs_seo 2015. 9. 4.

조인

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