oracle表分区设计_ORACLE 分区表的设计

ORACLE 分区表的设计

更新时间:2009年08月13日 15:08:24   作者:

分区致力于解决支持极大表和索引的关键问题。它采用他们分解成较小和易于管理的称为分区的片(piece)的方法。

分区表的概念

分区致力于解决支持极大表和索引的关键问题。它采用他们分解成较小和易于管理的称为分区的片(piece)的方法。一旦分区被定义,SQL语句就可以访问的操作某一个分区而不是整个表,因而提高管理的效率。分区对于数据仓库应用程序非常有效,因为他们常常存储和分析巨量的历史数据。

分区表的分类

Range partitioning(范围分区)

Hash partitioning(哈希分区)

List partitioning(列表分区)

Composite range-hash partitioning(范围-哈希组合分区)

Composite range-list partitioning(范围-列表组合分区)

何时选择范围分区

必须可以将表的记录按照某一列值的范围进行划分。你想处理一些数据,这些数据经常是属于某一个范围内,例如月份。如果数据能够按照分区的范围均匀分布的话,那会获得最佳性能。如果数据分布很不均匀的话,你可能不得不选择其他分区方式。

CREATE TABLE sales

( invoice_no NUMBER,

sale_year INT NOT NULL,

sale_month INT NOT NULL,

sale_day INT NOT NULL )

PARTITION BY RANGE (sale_year, sale_month, sale_day)

( PARTITION sales_q1 VALUES LESS THAN (1999, 04, 01)

TABLESPACE tsa,

PARTITION sales_q2 VALUES LESS THAN (1999, 07, 01)

TABLESPACE tsb,

PARTITION sales_q3 VALUES LESS THAN (1999, 10, 01)

TABLESPACE tsc,

PARTITION sales_q4 VALUES LESS THAN (2000, 01, 01)

TABLESPACE tsd );

何时选择HASH分区如果数据不容易用范围分区,但你想提升性能和表的易管理性。 Hash分区提供了一个在指定数量的分区内交叉均匀分布数据的方法。行根据分区键的hash值映射到相应分区中。创建和使用hash分区你可以灵活放置数据,可以通过交叉访问在不同I/O设备上的分区提升性能。

CREATE TABLE scubagear (id NUMBER, name VARCHAR2 (60))

PARTITION BY HASH (id)

PARTITIONS 4 STORE IN (gear1, gear2, gear3, gear4);

何时选择列表分区

使用LIST分区你可以直接控制某些数据映射到某些分区。你可以为某个分区指定不连续的分区键值。这不同于RANGE分区(用键值的范围划分分区),也不同于HASH分区(不能控制某行映射到哪个分区)。

CREATE TABLE q1_sales_by_region

(deptno number, deptname varchar2(20), quarterly_sales number(10, 2), state varchar2(2))

PARTITION BY LIST (state)

(PARTITION q1_northwest VALUES ('OR', 'WA'),

PARTITION q1_southwest VALUES ('AZ', 'UT', 'NM'),

PARTITION q1_northeast VALUES ('NY', 'VM', 'NJ'),

PARTITION q1_southeast VALUES ('FL', 'GA'),

PARTITION q1_northcentral VALUES ('SD', 'WI'),

PARTITION q1_southcentral VALUES ('OK', 'TX'));

分区表的设计如何选择分区的类型,如何选择分区的列呢?在这之前你必须明确你的目的——易管理性和性能,你更注重哪个方面?分区表所影响的方面可以归类为以下几种:性能、易管理性、数据清理。

下面分别说说分区表对每一项的具体影响,

性能:

这一般是分区的主要目的。分区将大表变成了小表,当where之后的条件体现分区字段的具体值时,避免了全表扫描。

易于管理:

对于包含海量数据的大表,分区带来的易于管理性是非常明显的。当你建议一个基于非分区表的索引时,唯一的选择就是创建整个索引。如果表被分区,你就可以根据分区并行为此表创建索引,例如:

alter index par_ind_01 reuild partition yy05;

除此之外你还可以同时的做很多事情,像改变表所在表空间、导出表,删除表数据等等。

数据清理:我们经常会需要删除表的一些历史数据,一般做法是delete,但是这会导致undo和redo的信息快速增长,而且影响数据库整体性能。这时我们就可以利用drop某个分区来完成此任务,例如:

alter table tab_a drop partition yy01;

当一个表的分区被删除,对应的local索引也同时被删除。如果还存在着global索引,那么它会变成unusable状态。为了避免此事情的发生,你可以使用:

alter table tab_a drop partition yy01 update global indexes;

相关文章

我们都知道,Oracle的监听默认端口是1521,但是如果系统上1521已经被占用或业务要求不用默认端口,又或者是为了安全,这个时候我们就需要修改监听的默认端口。下面这篇文章主要介绍了修改Oracle监听默认端口号1521的方法,需要的朋友可以参考下。2017-01-01

这篇文章主要介绍了Oracle中的半联结和反联结详解,也称半连接和反连接,其实就是in、exists,需要的朋友可以参考下2014-07-07

这篇文章主要为大家详细介绍了Oracle11.2.0.1如何升级到11.2.0.3的过程,Oracle同版本升级的方法,感兴趣的小伙伴们可以参考一下2016-07-07

下面小编就为大家分享一篇Oracle数据库部分迁至闪存存储的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2017-12-12

这篇文章主要给大家介绍了关于ORACLE中如何找到未提交事务的SQL语句,文中通过示例代码介绍的非常详细,对大家学习或者使用ORACLE具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧2019-06-06

ORACLE常见错误代码的分析与解决二...2007-03-03

Oracle Index 的三个问题...2007-03-03

下面小编就为大家分享一篇Oracle多库查询方法,具有很的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2017-12-12

这篇文章主要介绍了rman备份脚本和rman增量备份脚本,需要的朋友可以参考下2014-03-03

这篇文章主要介绍了oracle执行update语句时卡住问题分析及解决办法,涉及记录锁等相关知识,具有一定参考价值,需要的朋友可以了解。2017-10-10

最新评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值