SQL/SQLD.

[SQLD] SQL활용 - 파티션

limitation01 2023. 3. 17. 15:20

Partition

파티션은 대용량의 테이블을 여러 개의 데이터 파일에 분리해 저장한다. 테이블의 데이터가 물리적으로 분리된 데이터 파일에 저장되면 입력, 수정, 삭제 조회 성능이 향상된다. 파티션은 각각의 파티션 별로 독립적으로 관리될 수 있다. 즉, 파티션 별로 백업하고 복구가 가능하면 파티션 전용 인덱스 생성도 가능하다.

파티션은 ORACLE 데이터베이스의 논리적 관리 단위인 테이블 스페이스 간에 이동이 가능하고 데이터를 조회할 때 데이터의 범위를 줄여 성능을 향상 시킨다.

 

Range Partiton

가장 일반적인 파티션 형태로 테이블의 컬럼 중에서 값의 범위를 기준으로 여러 개의 파티션으로 데이터를 나누어 저장하는 기능이다. 

List Partition

순서와 상관없이, 사용자가 미리 정한 그룹핑 특정 기준에 따라 데이터를 분할 하는 기능이다.

Hash Partition

데이터베이스 관리 시스템이 내부적으로 해시 함수를 사용해 데이터를 분할하는 기능이다. 데이터가 모든 파티션에 고르게 분산되도록 DBMS가 관리해 각 로우의 저장 위치를 예측 할 수 없고 병렬 처리시 성능 효과를 극대화 할 수 있다.

Composite Partition

여러 파티션 기법을 조합해서 사용하는 기능이다.

 

파티션 인덱스

테이블 파티션과 맞물려 다양한 구성이 존재한다. 파티션 키를 사용해 인덱스를 만드는 Prefixed Index와 해당 파티션만 사용하는 Local Index등으로 나누어진다. ORACLE 데이터베이스는 Global Non-Prefixed를 지원하지 않는다.

Local Index

인덱스 파티션 키를 사용자가 따로 지정하지 않으며, 테이블과 1:1 관계를 유지하도록 DBMS가 자동으로 관리해준다. 해당 파티션 별로 각자의 인덱스를 사용하는 형태이다.

Global Index

여러 개의 파티션에서 하나의 인덱스를 사용하는 형태이다.

Prefixed Index

파티션 키와 인덱스 키가 동일하다.

Non-Prefixed Index

파티션 키와 인덱스 키가 다르다

 

인덱스 파티셔닝 가이드

구분 적용 기준 및 고려사항
Global Prefixed - 인덱스 경합 분산에 효과적
- 여러 Local 인덱스 파티션을 액세스하는 것이 비효율적일 때 대안으로 활용 가능
- 테이블 파티션 이동, 삭제 등의 작업 시 unusable 되므로 적용 시 주의
Local Prefixed - 관리적 측면에서 유용 : 테이블 파티션에 대한 추가, 삭제 등의 작업이 빈번할 때
- 이력성 데이터를 주로 관리하는 DB 환경에 효과적
- 파티션 키 칼럼이 '=' 조건으로 사용될 때 유용
- 파티셔닝 칼럼에 대한 검색 조건이 없으면 인덱스 선두 칼럼이 조건절에 누락된 것이므로 정상적인 사용이 불가(Index Full Scan으로는 선택 가능)
- 파티션 키 칼럼(=인덱스 선두 칼럼)이 Like, Between, 부등호 같은 범위검색 조건일 때 불리
Local Non Prefixed - 관리적 측면에서 유용 : 테이블 파티션에 대한 추가, 삭제 등의 작업이 빈번할 때
- 이력성 데이터를 주로 관리하는 DB 환경에 효과적
- 파티션 키 칼럼이 조건절에 사용될 때 유용
- 파티셔닝 칼럼에 대한 검색 조건이 없으면 인덱스 파티션 전체를 액세스하는 비효율이 발생할 수 있으므로 주의
- 파티션 키 칼럼이 범위검색 조건으로 자주 사용된다면 Local Prefixed 보다 Local NonPrefixes가 유리. 그렇다더라도 좁은 범위검색이어야 함
728x90
반응형

'SQL > SQLD.' 카테고리의 다른 글

[SQLD] SQL활용- 윈도우 함수  (0) 2023.03.17
[SQLD] SQL활용 - GROUP 함수  (0) 2023.03.17
[SQLD] SQL 활용 - 서브쿼리(Subquery)  (0) 2023.03.17
[SQLD] SQL 활용 - 계층형 쿼리  (0) 2023.03.17
[SQLD] SQL 활용 - JOIN  (0) 2023.03.17