Database초보우낙
7.파티션중 하나의 파티션에만 인덱스 생성 가능 본문
▩ 예제7. 파티션중 하나의 파티션에만 인덱스 생성 가능
* 테이블의 종류 5가지?
1. 일반 테이블(heap table) : 열과 행의 구조로 데이터를 저장하는 기본 저장소
2. 파티션 테이블(partition table) : 데이터가 아주 커서 데이터의 종류별로
별도의 파티션에 저장하는 테이블
2.1 global partition index
2.2 local partition index
2.3 특정 파티션 한개에만 인덱스를 생성할 수 있음
3. 클러스터 테이블(cluster table) : 비슷한 데이터들을 물리적으로 같은 디스크에
저장하겠금 구성한 테이블
4. IOT table ( index organization table ): 인덱스 구조의 테이블.
인덱스와 테이블을 합쳐서 검색 속도를
높이겠금 디자인된 테이블
5. 외부 테이블(external table) : 데이터베이스에 데이터가 저장되어 있지 않고
os에 저장되어있는 테이블
■ 파티션 테이블의 종류 4가지 ?
( 면접문제 ) 파티션 테이블의 종류에 대해서 아시는데로 설명해보세요.
1. range 파티션 테이블
2. hash 파티션 테이블
3. list 파티션 테이블
4. 복합 파티션 테이블 : 1. range + hash 파티셔닝
2. range + list 파티션닝
3. range + range 파티션닝
4. list + hash 파티셔닝
5. list + list 파티셔닝
6. list + range 파티셔닝
■ 실습: (https://cafe.daum.net/oracleoracle/SoYx/51)
▣ 예제1. emp 테이블의 월급을 파티션 키 컬럼으로 해서 파티션 테이블을 생성하시오
create table emp_partition3
( empno number(4,0) ,
ename varchar2(10),
job varchar2(9),
mgr number(4,0),
hiredate date,
sal number(7,2),
comm number(7,2),
deptno number(2,0)
)
partition by range(sal)
( partition p1_sal values less than( 1000 ),
partition p2_sal values less than( 2000 ),
partition p3_sal values less than( 3000 ),
partition p4_sal values less than( 4000 ),
partition p5_sal values less than( 5000 ),
partition p6_sal values less than( maxvalue ) );
insert into emp_partition3
select *
from emp;
▣ 예제2. 파티션별로 데이터가 잘 골고루 분배되었는지 확인하시오 !
#1. emp_partition3 테이블의 통계정보를 수집합니다.
exec dbms_stats.gather_table_stats('scott', 'emp_partition3');
#2. 데이터 딕셔너리를 조회
select table_name, partition_name, num_rows
from user_tab_partitions
where table_name='EMP_PARTITION3';
▣ 예제3. emp_partition3 파티션 테이블에 파티션 인덱스를 생성하시오 !
* 파티션 인덱스 2가지?
1. 로컬 파티션 인덱스 : 테이블의 파티션의 갯수와 인덱스의 파티션의 갯수가 서로 일치
(현업에서 많이 사용)
예: create index emp_partition3_local_indx
on emp_partition3(sal) local;
2. 글로벌 파티션 인덱스: 테이블의 파티션의 갯수와 인덱스의 파티션의 갯수가 서로 불일치
예: drop index emp_partition3_local_indx;
create index emp_partition3_global
on emp_partition3(sal) global
partition by hash(sal) partitions 2;
테이블의 파티션의 갯수는 6개인데 인덱스 파티션의 갯수는 2개입니다.
▣ 예제4. 12c 에 새로 나온 파티션 인덱스
파티션중에 하나의 파티션에만 인덱스를 생성할 수 있게 했습니다.
장점: 1. 저장 공간 아주 크게 절약됩니다.
2. 특정 파티션의 특정 범위의 데이터만 자주 조회를 하는 경우의 성능을 더 높일 수
있습니다.
3. 인덱스가 필요없는 파티션에 대해서는 인덱스 유지 관리 작업이 불필요해지므로
관리비용과 시간을 절약할 수 있습니다.
-- 먼저, 파티션 절을 추가합니다 (테이블을 재생성해야 파티셔닝할 수 있습니다)
drop table emp_part;
CREATE TABLE emp_part
(EMPNO NUMBER(4) NOT NULL,
ENAME VARCHAR2(10),
deptno number(10))
PARTITION BY RANGE (deptno) (
PARTITION p1 VALUES LESS THAN (20),
PARTITION p2 VALUES LESS THAN (40)
);
-- 그 다음, 파티션 중 하나에만 적용되는 부분 인덱스를 생성합니다:
CREATE INDEX emp_part_idx ON emp_part(empno) LOCAL (
PARTITION p1,
PARTITION p2 UNUSABLE
);
'oracle 12c' 카테고리의 다른 글
9.(12c의 새로운 기능) SQL PLAN MANAGER 와 SQL Profile (0) | 2024.04.30 |
---|---|
8.(12c 의 뉴피쳐 ) 오라클 heatmap 과 ADO (0) | 2024.04.30 |
6. 컬럼값 자동증가 기능(12c 뉴피처) (0) | 2024.04.26 |
5. 페이징 처리가능 (12c 뉴피처) (1) | 2024.04.26 |
4. 같은 컬럼에 여러개의 인덱스를 생성할 수 있다(12c) (0) | 2024.04.26 |