- Nested Loop Join
가장 많이 사용되는 조인으로 소량의 데이터 추출에 적합함
드라이빙 테이블이 중요함 (인덱스 매칭율, 데이터 통계정보에 의해서 결정함)

- Hash Join
해시 알고리즘을 사용하는 조인
CPU, 메모리에 따라 성능이 달라짐. 대량의 메모리를 사용해서
적은 사이즈의 데이터를 드라이빙 테이블로 권고함

- Sort Merge Join
전체 범위 처리가 필요한 경우 유용함
드라이빙 테이블과는 상관이 없는 구조

- Partition (오라클 기준)
8i : 범위값 기준, Ragne Partition (IBM DB2의 경우 v9부터 지원)
9i : 이산값 기준, List Partition
10g : 해시 함수, Hash Partition

1. CLUSTER
1) 데이터 저장 형태
- 데이터 저장 형태의 변천
· 과거에 비해 데이터 베이스의 활용이 많아지면서 데이터의 양은 기하급수적으로 늘어남
· 데이터웨어하우스나 데이터마트의 구축 및 과거 데이터에 대한 이력관리까지 더해지면서 예전 데이터 양에 비해서 몇배, 몇십배, 몇백배까지 데이터의 양은 증가
· 클러스터나 파티션 기법이 많이 활용되고 있으며, 대량 데이터 IF에 유용하게 사용할 수 있는 SQL 기술도 늘어남


- 테이블
· 정규 테이블
가장 일반적으로 사용되는 기본 테이블
테이블의 행의 분포에 대해서는 사용자의 제어는 거의 불가능
행은 테이블에 수행된 작업에 따라 어떤 순서로도 저장될 수 있음

- 클러스터
· 관계된 일련의 행들을 그룹화된 데이터 저장 블록에 저장하는데 사용

- 분할 테이블 (파티션)
· 하나 이상의 파티션을 가지며 각 파티션은 지정된 범위의 키 값을 갖는 행들을 저장
· 분할 테이블의 각 파티션은 세그먼트이며 서로 다른 테이블스페이스에 위치할 수 있음
· 여러 프로세스가 동시에 질의하는 큰 테이블에 유용

- IOT
· IOT는 모든 테이블 데이터를 b-tree 구조로 저장
· 테이블보다 인덱스의 특성이 더 많음

2) 클러스터의 정의
테이블의 데이터를 저장하는 방법으로 클러스터 키라고 부르는 공통된 칼럼을 기준으로 하나 이상의 테이블 데이터를 동일한 블록에 모아서 저장할 수 있는 선택적인 기능
인덱스 뿐만 아니라 데이터 저장 공간인 테이블 부분까지 영향을 줌
※ 클러스터에 대하여 select, insert를 포함한 dml 문장을 실행하기 전에 클러스터 인덱스를 생성 (클러스터 인덱스를 생성하기 전에는 어떤 자료도 클러스터에 저장될 수 없음)
클러스터에 포함된 테이블의 row를 클러스터 키 값에 따라 조회할 경우 해당 데이터가  저장된 첫 번째 블록의 위치를 찾기 위하여 클러스터 인덱스를 사용

3) 클러스터의 활용
- 클러스터 활용
· 지정된 칼럼 값의 순서대로 row 를 저장시키는 방법
· 액세스 기법이 아니라 액세스 효율 향상을 위한 물리적 저장기법
· 다량 범위 데이터에 대한 검색을 자주하는 경우
· 넓은 분포도를 가지고 있어 index 활용이 어려운 경우
· 수정이 자주 발생하지 않는 column
· 여러개의 테이블이 자주 join 을 할 경우
· order by, group by, union, distinct 가 자주 발생하는 column

- 활용시 주의사항
· insert, update, delete 처리시 overhead 발생
· cluster key 의 최대 column 수는 16임
· cluster key 의 수정은 자주 발생하지 않을 것
· index 사용이 가능한 범위의 데이터는 효과가 크지 않음
· cluster 를 생성하면 기존의 index 는 재구성
· cluster key 별 row 수의 편차가 심하지 않을 것
· cluster 된 테이블 join 시 row 수의 역순으로 from 절에 기술할 것
· index 와 cluster 의 액세스 역할 분담 명확화

※ 만약 사용중인 클러스터 인덱스를 drop 한다면, 클러스터된 자료는 그대로 저장되어 있지만 그 자료에 접근할 수 있는 경로가 없기 때문에 새로운 클러스터 인덱스를 생성하기 전까지는 클러스터 자료를 조회할 수가 없음
클러스터 인덱스의 저장 위치를 다른 테이블 스페이스로 이동하고자 한다면, 인덱스를 drop 한 후 재생성 해야만 함(인덱스를 생성하는 동안에는 클러스터 자료를 조회할 수 없음)
단점 : 강력한 기능을 가진 클러스터 이지만 관리가 힘들고, 비정형화된 쿼리를 대응하기 힘들고 dml 이 많은 테이블에는 적합하지 않음

4) 클러스터의 종류




5) HASH 함수란?

2. Partition
1) 파티션의 구조

2) 파티션의 구성 요소
- partition by range/list/hash : 파티션 키를 정의
- values less than : 데이터가 저장되는 파티션의 이름과 경계값 지정
- physical attribute : tablespace 및 storage 물리적 속성을 지정

파티션 되어지는 실제 data 값(경계값)을 지정
데이터가 저장되는 파티션의 이름을 지정하는 values less than, 테이블 스페이스와 같은 physical 속성을 지정하는 3부분으로 구성
파티션 내 sub partiton 도 가능

- 인덱스 파티션 구문

- 테이블 파티션 구문

3. partition 예제
1) 8i range 파티셔닝


2) 9i LIST 파티셔닝
- 이점
· 사용자가 파티션에 대한 로우의 매핑을 조정할 수 있음
· 이산 칼럼 값에 기초하여 데이터의 분산을 함
· 무순 무관의 데이터 집합이 자연스럽게 그룹핑 됨
· 파티션 간에 연관을 갖지 않음
· 이산값으로 구성된 칼럼에 이상적임
· 강력한 데이터 관리 능력이 있음


3) 10g HASH 파티셔닝
오라클 10g 부터는 그동안 지원하지 않던 hash 함수를 이용한 파티션을 지원. 반면 ibm db2 의 경우는 해시 파티션만 지원했는데, 9 버전 부터는 range 파티션을 지원


4) 전체 파티션의 효과 사례



원 테이블에서 자료를 읽어 온 경우에 비해 우선적으로 수행 시간이 상당히 줄어든 것을 알 수 있음.
원 테이블에서 검색한 경우에는 모든 년도의 데이터를 액세스하는데 반해, 파티션된 테이블의 경우는 파티션 기준인 년도가 200년인 데이터만 (물리적으로 생성되어진 파티션만) 스캔 액세스해서 원하는 데이터를 가져오기 때문에 query 건수도 적고 시간도 빠른 것임
파티션의 경우 대량 데이터에 대한 내부 관리 측면과 파티션 기준의 조건이 사용된다면 일반 인덱스 보다 빠른 성능을 보일 수 있으나, 다양한 조건을 사용하는 경우는 오히려 도움이 되지 못하고 유지 관리의 어려움이 있음

4. merge, multi table inser, 외부 테이블
1) merge
두 테이블을 merge 하여 데이터를 변경하는 것인데  upsert 로 더 잘 알려져 있음.

· merge 문은 row가 존재하는 경우는 업데이트를 수행하고 그렇지 않으면 인서트를 수행 (update+insert=upsert)
· 즉, 테이블 A, B를 비교하여 A에 값이 없으면 B의 데이터를 입력하고, A의 값이 있으면 B의 값으로 update 함
· 데이터웨어하우스 어플리케이션의 ETL 과정에 유용함
· 하나의 SQL 문으로 하여금 갱신이나 삽입, 또는 둘다 수행할 수 있고, 읽어오는 데이터를 한번만 처리하므로 성능 향상의 효과가 있음
· 3G/L 프로그램 한 본을 SQL 문 하나로 처리할 수 있음
· ON (d.deptno = e.deptno) 는 뒤의 표준 SQL에서 설명하겠지만, 두 테이블의 연결고리 즉, 조인 조건을 표시한 것임


2) multi table insert
· multi table insert 기능은 서브쿼리에서 얻어진 값을 하나 이상의 테이블에 insert 함
· insert...select 문장을 수행할 때 하나의 dml 문장만으로 복수의 테이블들에 행들을 삽입할 수 있음
· 데이터웨어하우스를 구축함에 있어서 원천 데이터로부터 여러 개의 목표 테이블로 데이터를 전송하는데 유용하게 사용할 수 있음
· when 절의 존재 여부에 따라 무조건과 조건의 두 가지 형태가 있음

3) 외부 테이블
· 외부 테이블이란 읽기 전용 테이블로서 데이터가 데이터베이스가 아닌 외부 파일에 저장되는 것을 말하며, 정규 테이블과의 주된 차이점은 읽기 전용이라는 것
· SQL*Loader 의 기능성을 보완해주는 것으로서, 외부 테이블에 대한 메타 데이터는 create table 명령에 의해 생성됨
· 외부 데이터를 데이터베이스 안으로 적재하지 않더라도 조회하거나 다른 테이블과 조인할 수 있으나, 갱신/삽입/삭제는 허용되지 않으며 인덱스 역시 생성할 수 없음
· dbms 로 관리는 안되지만, 외부 데이터가 크고 자주 참조되는 것은 아닐 때 유용

5. 이것만은 꼭!

더보기



크리에이티브 커먼즈 라이선스
Creative Commons License

설정

트랙백

댓글