ORACLE 分区表的设计_oracle

分区表的概念
分区致力于解决支持极大表和索引的关键问题。它采用他们分解成较小和易于管理的称为分区的片(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;

时间: 2024-07-29 21:16:36

ORACLE 分区表的设计_oracle的相关文章

优化Oracle库表设计的若干方法_oracle

正在看的ORACLE教程是:优化Oracle库表设计的若干方法. 前言 绝大多数的Oracle数据库性能问题都是由于数据库设计不合理造成的,只有少部分问题根植于Database Buffer.Share Pool.Redo Log Buffer等内存模块配置不合理,I/O争用,CPU争用等DBA职责范围上.所以除非是面对一个业已完成不可变更的系统,否则我们不应过多地将关注点投向内存.I/O.CPU等性能调整项目上,而应关注数据库表本身的设计是否合理,库表设计的合理性才是程序性能的真正执牛耳者.

Oracle分区表的分区交互技术实现数据快速转移

有一个需求,将某业务表的某个时间点之前的记录转移到它的历史表中.如果当前业务表不是基于这 个业务时间点的分区表设置,那只能insert再delete操作.这种转移数据的方法非常非常低基础.经常 在初级的数据库管理人员和开发人员的程序中出现.不是说这个方法不好,对于转移的记录数量在几十 几百条,而转移频率高,转移时间点随机的情况而言,这个方法还是挺管用的.但如果转移的数据量一 次数以百万计的话,这种方法就显得低效了. 因此,在Oracle数据库开发中,对于这种大数据的转移可以使用分区表交换技术实现

c++-求vs2010和oracle的接口设计 用C++

问题描述 求vs2010和oracle的接口设计 用C++ 求vs2010和oracle的接口设计用C++最好是要有完整的代码,非常感谢 解决方案 http://wenku.baidu.com/link?url=0bpAcJtMDq4Z8VI77KfA_K2-cd8k0FFCzIkVzvJ9IpcKZuZUrfxrvOAnlhP_Y3vKUCj6kb6r-HNFei7n0-k7v2Mbc9PWk819QIZyTWurBZa 解决方案二: http://blog.sina.com.cn/s/blo

Oracle 分区表

--================== --  Oracle 分区表 --==================   一.分区表:     随着表的不断增大,对于新纪录的增加.查找.删除等(DML)的维护也更加困难.对于数据库中的超大型表,可通过把它的数据分成若干个小表,从而简化数据库的管理活动.对于每一个简化后的小表,我们称为一个单个的分区.       对于分区的访问,我们不需要使用特殊的SQL查询语句或特定的DML语句,而且可以单独的操作单个分区,而不是整个表.同时可以将不同分区的数据放置

导入导出 Oracle 分区表数据

--**************************** -- 导入导出 Oracle 分区表数据 --****************************         导入导入Oracle 分区表数据是Oracle DBA 经常完成的任务之一.分区表的导入导出同样普通表的导入导出方式,只不过导入导出需要考 虑到分区的特殊性,如分区索引,将分区迁移到普通表,或使用原始分区表导入到新的分区表.下面将描述使用imp/exp,impdp/expdp导入导出 分区表数据.       有关分

oracle-百亿条记录 Oracle 分区表问题

问题描述 百亿条记录 Oracle 分区表问题 现有大量交通流数据需要处理,表结构主要有 时间.id号.经度.纬度等 一年的数据量大概在150一条. 查询需求主要有两个 1根据 ID号 和时间 查询记录 2根据 经纬度 查询记录 问题一:请教大神,怎么建立分区表和索引,能满足上述两种快速查询的需求呢? 问题二:另外一个数据文件的大小最大32G,百亿条记录存储大概需要20个文件,这些文件是自己手动建立,还是oracle自动生成的呢?怎么配置才不会出现表空间不足的异常提示? 解决方案 第一个问题:可

【三思笔记】 全面学习Oracle分区表及分区索引

[三思笔记]全面学习Oracle分区表及分区索引 2008-04-15 关于分区表和分区索引(About PartitionedTables and Indexes) 对于 10gR2 而言,基本上可以分成几类: v  Range(范围)分区 v  Hash(哈希)分区 v  List(列表)分区 v  以及组合分区:Range-Hash,Range-List. 对于表而言(常规意义上的堆组织表),上述分区形式都可以应用(甚至可以对某个分区指定 compress 属性),只不过分区依赖列不能是

浅谈Oracle数据库的建模与设计_oracle

正在看的ORACLE教程是:浅谈Oracle数据库的建模与设计.要开发一个基于数据库的应用系统,其中最关键的一步就是整个系统所依据的数据库的建模设计,从逻辑的到物理的,一个环节疏于设计,整个的应用系统便似建立在危房之上,随着开发过程的不断深入,它要随时面临着各种难  以预料的风险,开发者要为修改或重新设计没有设计好的数据库系统而付出难以预料的代价.所以,一个良好的数据库设计是高效率的系统所必须的.  一.逻辑建模  数据库设计的方法因具体数据库而异,但是建模阶段的相同的,所以可以用一些通用的工具

优化Oracle库表设计的若干方法

oracle|设计|优化 前言 绝大多数的Oracle数据库性能问题都是由于数据库设计不合理造成的,只有少部分问题根植于Database Buffer.Share Pool.Redo Log Buffer等内存模块配置不合理,I/O争用,CPU争用等DBA职责范围上.所以除非是面对一个业已完成不可变更的系统,否则我们不应过多地将关注点投向内存.I/O.CPU等性能调整项目上,而应关注数据库表本身的设计是否合理,库表设计的合理性才是程序性能的真正执牛耳者.合理的数据库设计需要考虑以下的方面: ·业