티스토리 뷰
테이블이 대용량이어서 특정한 데이터를 조회할 때 시간이 많이 걸릴 때는 파티션으로 지정한다.
파티션 테이블
논리적으로는 하나의 테이블이지만 물리적으로 데이터들이 파티션으로 나뉘어서 저장이 됨.
논리적으로 하나의 테이블이기 때문에 쿼리를 작성할 때 일반 테이블처럼 기술할 수 있음.
파티션 키 컬럼
데이터들이 파티션으로 나뉘어서 다른 세그먼트에 담겨질 때 나뉘는 기준.
키 컬럼을 어떻게 지정하느냐에 따라 Range , Hash , List로 타입이 나뉜다
Range
키 컬럼을 범위로 나눔. 일반적으로 많이 쓰임
ex) 주문테이블이있을 때 2019년 1월부터 2019년 12월까지 주문된 데이터를 하나의 파티션에 담겠다
List
상품테이블을 List파티션으로 구성하겠다 했을 때 상품의 카테고리에 따라 1번 카테고리의 상품, 2번 카테고리의 상품을 각각 다른 파티션으로 구성하는 방식
Hash
키 컬럼을 해쉬 Function에 대입을해서 어떤 파티션에 저장을 할지를 정의함. 쉽게 말해서 데이터가 저장될 파티션을 랜덤으로 지정해주겠다는 방식
왜 파티션을 사용할까?
테이블이 대용량이어서 특정한 데이터를 조회할 때 시간이 많이 걸릴 때는 파티션으로 지정한다. 파티션 테이블에는
프루닝(Pruning)이라는 특정한 데이터를 조회할 때 그 데이터가 포함된 파티션만 뒤질 수 있는 기능을 제공한다.
ex) 2019년 5월의 주문 데이터만 조회하고 싶을 때 2019라는 파티션만 확인함.
따라서 SELECT를 할 때 서버 부하나 속도에 유리하다.
로그를 저장하는 히스토리성 테이블은 1 ~ 2년만 지나면 불필요한 데이터가 많아져서 삭제를 하는 경우가 많은데 그런 테이블을 파이션으로 구성하면 삭제시에 특정한 파티션만 날리면 되므로 간단하게 운영할 수 있다.
파티션 테이블의 인덱스 타입
파티션 테이블의 인덱스를 생성할 때 인덱스에도 타입이 나눠지는데 로컬, 비파티션, 글로벌 파티션 인덱스 3가지로 나뉜다.
로컬 파티션 인덱스
흔히 많이씀, 데이블 파티션 키 컬럼 기준으로 똑같이 인덱스가 구성됨.
ex) 테이블에 파티션이 5개일 때 인덱스로 똑같이 5개가 됨. 나뉘어지는 기준도 테이블과 동일하게 됨. 테이블의 파티션 구조가 바뀌거나 삭제됐을 때도 인덱스 재생성이 필요가 없이 오라클에서 알아서 관리해주기 때문에 운영에 용이하다.
비파티션 인덱스
테이블은 파티션으로 나뉘어져있지만 인덱스는 통짜로 관리한다.
글로벌 파티션 인덱스
파티션으로 인덱스도 나뉘어져있지만 테이블의 파티션과는 따로 논다라고 생각하면 된다. 보통 잘 구성하지 않음
테이블을 파티션으로 구성할때 고려할점
각 파티션에 데이터들이 고르게 분산이 될 수 있도록 키 컬럼과 타입을 설정하여 쿼리를 날려서 어떤 작업을 할 때 특정 파티션에만 부하가 생긱는 일이 발생하지 않도록 한다.
결합 파티션
Range-List / Range-Range / Range-Hash 등 주파티션과 서브 파티션으로 나뉘어지는 식으로 구성도한다.
주 파티션의 개수 x 서브 파티션의 개수가 되어 인덱스 경합이 너무 심하여 꼭 나눠야하는 상황이 아닌이상 보통은 이렇게 구성하는 것을 지양한다.
'DataBase > SQL 용어' 카테고리의 다른 글
DEFAULT (Oracle) (0) | 2020.04.28 |
---|
- 20200421
- 20200423
- 20200425
- 20200512
- 20200427
- 20200622
- 20200317
- 백준
- 20200624
- 20200504
- 20200429
- 20201204
- 20200804
- 20200403
- likelion
- 20200330
- 20200424
- chapter7
- 20200428
- 20200413
- 20200417
- 20200420
- chapter8
- 20200415
- 20200503
- 20200319
- 20200510
- 생활코딩리눅스
- 20200406
- 20200502
- Total
- Today
- Yesterday