总结自ORACLE官方在线帮助文档。

ORACLE 为构建数据仓库提供了4种类型的分区方法:Range Partition ,Hash Partition ,List Partition,Composite Partition.

下面我分别对这四种分区方法的概念,他们的使用场景,以及各种分区方法做一个性能比较。

一:概念

1:Range Partitioning

这是最常用的一种分区方法,基于COLUMN的值范围做分区,最常见的是基于时间字段的数据的范围的分区,比如:对于SALE表,可以对销售时间按照月份做一个Range Partitioning。这种分区在数据仓库里用的比较多,以下是CREATE STATMENT

CREATE TABLE sales_range

(salesman_id  NUMBER(5),

salesman_name VARCHAR2(30),

sales_amount  NUMBER(10),

sales_date    DATE)

COMPRESS

PARTITION BY RANGE(sales_date)

(PARTITION sales_jan2000 VALUES LESS THAN(TO_DATE('02/01/2000','DD/MM/YYYY')),

PARTITION sales_feb2000 VALUES LESS THAN(TO_DATE('03/01/2000','DD/MM/YYYY')),

PARTITION sales_mar2000 VALUES LESS THAN(TO_DATE('04/01/2000','DD/MM/YYYY')),

PARTITION sales_apr2000 VALUES LESS THAN(TO_DATE('05/01/2000','DD/MM/YYYY')));

对于COMPRESS关键字的理解,将在后续的压缩分区讲到

2;Hash Partitioning

Hash Partitioning映射数据到基于HASH算法的分区上,HASH算法将应用你指定的分区关键字,平均的分那些在Partitions中的行。给每一个分区近似相同的大小,要保证数据能平均分配,分区数一般是2N。比如说,需要insert sales_hash 一条数据,ORACLE会通过HASH算法处理salesman_id,然后找到对于的分区表进行insert。Hash Partitioning 是为跨越设备的分布式数据提供了一种理想的方法,HASH算法也很容易转化成RANGE分区方法,特别是当被分区的数据不是历史数据时。

CREATE TABLE sales_hash

(salesman_id  NUMBER(5),

salesman_name VARCHAR2(30),

sales_amount  NUMBER(10),

week_no       NUMBER(2))

PARTITION BY HASH(salesman_id)

PARTITIONS 4;

3:List Partitioning

List Partitioning能够让你明确的控制有多少行被分区,你能对要分区的COLUMN上明确的指定按照那些具体的值来分区,这种方式在Range和Hash方式是做不到的。这种方式的优点是,你能组织和分组那些没有顺序和没有关系的数据集。下面是通过销售地区做一个List分区表。

CREATE TABLE sales_list

(salesman_id  NUMBER(5),

salesman_name VARCHAR2(30),

sales_state   VARCHAR2(20),

sales_amount  NUMBER(10),

sales_date    DATE)

PARTITION BY LIST(sales_state)

(PARTITION sales_west VALUES('California', 'Hawaii') COMPRESS,

PARTITION sales_east VALUES('New York', 'Virginia', 'Florida'),

PARTITION sales_central VALUES('Texas', 'Illinois'));

4:Composite Partitioning

Composite Partitioning 是把Range ,Hash ,List 分区方式组合起来的分区方式。

比如Composite Range-Hash Partitioning和Composite Range-List Partitioning:

CREATE TABLE sales_range_hash(

s_productid  NUMBER,

s_saledate   DATE,

s_custid     NUMBER,

s_totalprice NUMBER)

PARTITION BY RANGE (s_saledate)

SUBPARTITION BY HASH (s_productid) SUBPARTITIONS 8

(PARTITION sal99q1 VALUES LESS THAN (TO_DATE('01-APR-1999', 'DD-MON-YYYY')),

PARTITION sal99q2 VALUES LESS THAN (TO_DATE('01-JUL-1999', 'DD-MON-YYYY')),

PARTITION sal99q3 VALUES LESS THAN (TO_DATE('01-OCT-1999', 'DD-MON-YYYY')),

PARTITION sal99q4 VALUES LESS THAN (TO_DATE('01-JAN-2000', 'DD-MON-YYYY')));

另外你还可以用subpartition template的方式指定:

CREATE TABLE sales_range_hash(

s_productid  NUMBER,

s_saledate   DATE,

s_custid     NUMBER,

s_totalprice NUMBER)

PARTITION BY RANGE (s_saledate)

SUBPARTITION BY HASH (s_productid)

SUBPARTITION TEMPLATE(

SUBPARTITION sp1 TABLESPACE tbs1,

SUBPARTITION sp2 TABLESPACE tbs2,

SUBPARTITION sp3 TABLESPACE tbs3,

SUBPARTITION sp4 TABLESPACE tbs4,

SUBPARTITION sp5 TABLESPACE tbs5,

SUBPARTITION sp6 TABLESPACE tbs6,

SUBPARTITION sp7 TABLESPACE tbs7,

SUBPARTITION sp8 TABLESPACE tbs8)

(PARTITION sal99q1 VALUES LESS THAN (TO_DATE('01-APR-1999', 'DD-MON-YYYY')),

PARTITION sal99q2 VALUES LESS THAN (TO_DATE('01-JUL-1999', 'DD-MON-YYYY')),

PARTITION sal99q3 VALUES LESS THAN (TO_DATE('01-OCT-1999', 'DD-MON-YYYY')),

PARTITION sal99q4 VALUES LESS THAN (TO_DATE('01-JAN-2000', 'DD-MON-YYYY')));

这样,没有子分区通过的HASH分区将会统一到不同的表空间。

二:使用各种分区方法的场景

1:什么时候用Range Partition

Range Partition是一种方便的方法分区历史的数据,经常在DATE COLMUN通过时间间隔组织数据。比如说:你要查询2009年8月的数据,查询将直接找到2009年8月的分区,避免了大量不必要的数据扫描。

在处理周期性的load新数据和purge老数据的时候,Range Partition也是一个理想的选择。

应用场景:

a)有一个大表需要通过时间字段频繁的访问,通过这个时间字段做RANG PARTITION 有利于做分区裁剪。

b)如果你不能对一个大表在指定的时间内做备份或RESTORE,你可以通过RANGE把他们分成小的logic片来做。

2:什么时候用HASH Partition

HASH Partition不是一个很好的管理历史的方法。

应用场景

a)增加大表的可用性。

b)避免各个分区之间查找数据,并且各个分区可以放在不同的设备上,达到最大的I0吞吐量。也可以用STORE IN 子句分配每个分区到不同的表空间。

3:什么时候用LIST Partition

如果你想映射数据到离散的值的时候,LIST Partition是个比较好的选择。

4:什么时候用Composite Range-Hash Partitioning

这是Range和Hash的组合使用,先对表用RANGE分,然后对每个RANGE再做HASH分区。

由于做了RANGE后的子分区是没有规律的,如果在数据仓库设计时候,通过查询需求觉得有必要再细分,可以考虑使用。ORACLE会把子分区又分成不同的SEGMENT。

oracle左裁剪原理,ORACLE 各种PARTITION 的分析(原)相关推荐

  1. oracle左裁剪原理,深入原理:分区剪裁特性剖析

    小鱼(邓秋爽) 云和恩墨专家,有超过5年超大型数据库专业服务经验,擅长oracle 数据库优化,SQL优化和troubleshooting 编辑手记:深入学习分区表的特性,更好地设计分区表的表结构 做 ...

  2. oracle 左连接 权限,Oracle 左连接、右连接、全外连接、(+)号作用

    Oracle  外连接 (1)左外连接 (左边的表不加限制) (2)右外连接(右边的表不加限制) (3)全外连接(左右两表都不加限制) 外连接(Outer Join) outer join则会返回每个 ...

  3. Oracle数据库asm原理,Oracle数据库中ASM功能解剖

    ASM的全称是Automated Storage Management,通俗的讲 就是自动存储管理,ASM是自Oracle10g版本Oracle推出的***功能之一.这是Oracle数据库提供的一个卷 ...

  4. Oracle count函数原理,oracle count函数

    用来返回查询的行数. 当指定distinct时,不能接order_by_clause: 如果指定表达式,count返回表达式不为空的值: 当指定*号时,它返回所有行,含重复行和空值.count从不返回 ...

  5. oracle命令行原理,Oracle命令行操作方式

    (1) 进入sqlplus界面 sqlplus user/password@dbname (2)进入sqlplus界面        sqlplus  /nolog        SQL>con ...

  6. oracle的并行原理

    引言:首先说明并行技术属于大数据范畴,适合OLAP系统,在任务分割.数据块分割.资源充裕的场合应用较广,本次分享主要概括并行原理.实际应用.性能对比.并行直接加载.索引属性.特点小结等六个小点去重点阐 ...

  7. Oracle架构实现原理、含五大进程解析(图文详解)

    目录 目录 前言 Oracle RDBMS架构图 内存结构 系统全局区SGA 高速缓存缓冲区数据库缓冲区 日志缓冲区 共享池 其他结构 进程结构 用户连接进程 用户进程User Process Ser ...

  8. Oracle的rownum原理和使用

    俺程序中用到的rownum分页+排序的实现(有机会仔细研究) select * from (select f.*, rownum as rnum from (select a.CIPID as cip ...

  9. oracle 9i hwm,Oracle 10g HWM原理及性能优化

    摘 要: HWM(High Water Mark)是表中已经使用过的存储空间与未使用过的存储空间之间的分界线,HWM对全表扫描的性能有非常大的影响.当全表扫描时,Oracle会读取HWM下所有的块,即 ...

  10. Oracle特殊恢复原理与实战(DSI系列)

    1.深入浅出Oracle(DSI系列Ⅰ) 2.Oracle特殊恢复原理与实战(DSI系列Ⅱ) 3.Oracle SQL Tuning(DSI系列Ⅲ)即将开设 4.Oracle DB Performan ...

最新文章

  1. python 多线程爬虫 实例
  2. 总点第一个视频产生选择偏差?Youtube用“浅塔”来纠正
  3. 算法工程师面试必考项——链表
  4. Maltego更新到4.1.6
  5. 通过数组名遍历整个数组
  6. oracle如何配置dns连接,图文详解添加DNS服务器的操作步骤
  7. 反射获取有参数的构造方法并运行
  8. linux面试题中的简答题,[计算机]linux面试题简答题部分.doc
  9. php调用另一个php文件里的变量的值,thinkphp中一个方法调用另一个步骤的变量
  10. 面型对象 (接口与类的区别)
  11. Linux配置本地yum源(RHEL8)
  12. linux看dns解析的时间,curl测试dns解析时间
  13. Python字符串index()方法应用案例一则
  14. 集 Python、C、R、Ruby 之所长,动态编程语言 Julia 1.0 正式发布
  15. Smartmail外贸CRMBuild1.0版系统白皮书
  16. markdown 在线解析 工具
  17. php 爬虫 执行js,php爬虫执行js,php执行js
  18. boost电路输出电流公式_boost计算公式
  19. python爬取公众号文章如何获取发布时间
  20. 别收藏 Excel 函数大全了!北大硕博生为帮助女朋友,开发了个 ChatExcel,一键处理表格...

热门文章

  1. 【优化预测】基于matlab粒子群算法优化CNN预测【含Matlab源码 362期】
  2. SPSS AMOS常用统计软件及科研神器安装包资源【SPSS 006期】
  3. SPSS统计指南【SPSS 003期】
  4. c语言设计四路彩灯显示系统,数字电路逻辑设计课程设计-四路彩灯显示系统设计...
  5. 贝叶斯网络 神经网络_随机贝叶斯神经网络
  6. Python argparse模块、argparse.ArgumentParser()用法解析
  7. php 上楼梯问题 递归,算法:爬楼梯问题中的递归
  8. Gateway配合sentinel自定义限流_Spring Cloud Gateway网关如何快速实施限流方案?-Part 6...
  9. 06 - JavaSE之常用类
  10. Oracle数据库常用脚本