oracle 分区表的优点

上传人:第*** 文档编号:31321761 上传时间:2018-02-06 格式:DOCX 页数:33 大小:68.36KB
返回 下载 相关 举报
oracle 分区表的优点_第1页
第1页 / 共33页
oracle 分区表的优点_第2页
第2页 / 共33页
oracle 分区表的优点_第3页
第3页 / 共33页
oracle 分区表的优点_第4页
第4页 / 共33页
oracle 分区表的优点_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《oracle 分区表的优点》由会员分享,可在线阅读,更多相关《oracle 分区表的优点(33页珍藏版)》请在金锄头文库上搜索。

1、ORACLE 表分区表分区的好处和事处理表分区描述表分区(partition ):表分区技术是在超大型数据库(VLDB)中将大表及其索引通过分区(patition)的形式分割为若干较小、可管理的小块,并且每一分区可进一步划分为更小的子分区(sub partition) 。而这种分区对于应用来说是透明的。Oracle 的表分区功能通过改善可管理性、性能和可用性,从而为各式应用程序带来了极大的好处。通常,分区可以使某些查询以及维护操作的性能大大提高。此外,分区还可以极大简化常见的管理任务,分区是构建千兆字节数据系统或超高可用性系统的关键工具。 分区功能能够将表、索引或索引组织表进一步细分为段,这些

2、数据库对象的段叫做分区。每个分区有自己的名称,还可以选择自己的存储特性。每个分区都是一个独立的段(SEGMENT) ,可以存放到相同(不同)的表空间中。从数据库管理员的角度来看,一个分区后的对象具有多个段,这些段既可进行集体管理,也可单独管理,这就使数据库管理员在管理分区后的对象时有相当大的灵活性。但是,从应用程序的角度来看,分区后的表与非分区表完全相同,使用 SQL DML 命令访问分区后的表时,无需任何修改。( 对于高效率查询是有影响,主要差别是对某一分区数据时行查询时和对整体数据进行查询)表分区的好处通过对表进行分区,可以获得以下的好处:1) 增强可用性:如果表的某个分区出现故障,表在其

3、他分区的数据仍然可用; 2) 维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可;3) 均衡 I/O:可以把不同的分区映射到磁盘以平衡 I/O,改善整个系统性能; 4) 改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。分区表事务操作的时候,指定了分区,系统在执行的时候则只操作该分区的记录,提高了数据处理的速度。不要指定分区直接操作数据也是可以的。在分区表上建索引及多索引的使用和非分区表一样。此外,因为在维护分区的时候可能对分区的索引会产生一定的影响,可能需要在维护之后重建索引,相关内容请参考分区表索引部分的文档缺点分区表相关:已经存在的表没有方法可以直接转

4、化为分区表。不过 Oracle 提供了在线重定义表的功能。什么时候使用分区表1、表的大小超过 2GB。2、表中包含历史数据,新的数据被增加都新的分区中。各版本表分区的特性区别下面的表列出了每个版本中包括的分区特性:Oracle 数据库版本分区特性8.0.5 引入范围分区8i 引入哈希和混合范围-哈希分区9i 引入列表分区,混合范围-列表分区10g 引入范围,列表和索引组织表的哈希分区,还引入了其他混合分区类型 (range-hash,range-list)11g 引用分区、间隔分区、虚拟列分区以及扩展的组合分区引入分区扩展: 间隔分区 REF 分区 基于列的虚拟分区 分区顾问(range-ra

5、nge,list-range,list-list,list-hash)分区别的类型 范围分区:将表按某一字段或若干个字段的取值范围分区。 hash 分区: 将表按某一字段的值均匀地分布到若干个指定的分区。 复合分区:结合了前面两种分区类型的优点,首先通过值范围将表进行分区,然后以 hash 模式将数据进一步均匀分配至物理存储位置。 列表分区:数据分布是通过分区键的一串值定义的,这对不连续的列表非常有用,如:区域、状态等。(9I 以上支持) 混合分区:有两个数据分布办法用于创建混合分区,表首先通过第一个数据分布办法进行初始化分区,然后每个分区再通过第二个办法分成子分区,下面列出了可用的混合分区类

6、型:范围-哈希,范围 -列表,范围 -范围,列表-范围,列表 -列表,列表-哈希。在 10g 中索引组织表(表的索引和数据存储在一起)支持通过范围、列表或哈希进行分区,然而,混合分区在索引组织表上不受支持。 间隔分区:在 11g 中才引入,间隔分区是对范围分区的扩展,为等距范围分区提供了自动化,分区创建为元数据,只有分区开始部分是不变的,附加的段是当数据抵达时才分配的,附加分区和本地索引是自动创建的。SQLCREATE TABLE SALES_PART(TIME_ID NUMBER,REGION_ID NUMBER,ORDER_ID NUMBER,ORDER_DATE DATE,SALES_Q

7、TY NUMBER(10,2),SALES_AMOUNT NUMBER(12,2)PARTITION BY RANGE (ORDER_DATE)INTERVAL (NUMTOYMINTERVAL(1,month)(PARTITION p_first VALUES LESS THAN (01-JAN-2006);numtoyminterval 函数转换一个数字为间隔一年至一个月的文字(年或月) ,间隔分区表可以有传统的范围和自动间隔部分,范围分区表可以通过在 ALTER TABLE 命令中使用 SET INTERVAL 选项被扩展为间隔分区表。 REF 分区 :这个分区方案假设关联表能从相同的分

8、区策略中受益,子表通过PK-FK(主键-外键)关系继承主表的策略,它不需要分区键存储在子表中,通过 PARTITION BY REFERENCE 关键字指定,子表继承主表的分区策略。 基于列的虚拟分区:在 Oracle 以前的版本中,只有分区键物理存在于表中才能对表进行分区,在 11g 中引入一个新的特性“虚拟列”移除了这个限制,允许分区键通过使用一个或多个表的列的表达式进行定义,虚拟列仅作为元数据存储。如:向表 ACCOUNTS 添加一个虚拟列:SQLCREATE TABLE ACCOUNTS(acc_no number(10) not null,acc_name varchar2(50)

9、not null, acc_loc varchar2(5),acc_branch number(2) generated always as(to_number(substr(to_char(acc_no),1,2);使用虚拟列作为分区键:SQLCREATE TABLE accounts(acc_no number(10) not null,acc_name varchar2(50) not null, acc_loc varchar2(5),acc_branch number(2) generated always as(to_number(substr(to_char(acc_no),1,

10、2)partition by list (acc_branch); 分区顾问Oracle 11g 也提供了分区顾问,它支持生成分区建议,与 10g 中为物理视图、物理视图日志和索引提供建议类似,实际上,分区顾问是 Oracle 11g 中 SQL访问顾问的一部分,这个顾问帮助生成建议,它将预先收集实施分区后的性能,它还生成创建高效分区的脚本,可以手动通过 SQL*plus 或通过企业管理器队列提交给 Oracle。分区表的创建范围分区将数据基于范围映射到每一个分区,这个范围是你在创建分区时指定的分区键决定的。这种分区方式是最为常用的,并且分区键经常采用日期。 当使用范围分区时,请考虑以下几个规

11、则:1、每一个分区都必须有一个 VALUES LESS THEN 子句,它指定了一个不包括在该分区中的上限值。分区键的任何值等于或者大于这个上限值的记录都会被加入到下一个高一些的分区中。2、所有分区,除了第一个,都会有一个隐式的下限值,这个值就是此分区的前一个分区的上限值。3、在最高的分区中, MAXVALUE 被定义。MAXVALUE 代表了一个不确定的值。这个值高于其它分区中的任何分区键的值,也可以理解为高于任何分区中指定的 VALUE LESS THEN 的值,同时包括空值。范围分区就是对数据表中的某个值的范围进行分区,根据某个值的范围,决定将该数据存储在哪个分区上。如根据序号分区,根据

12、业务记录的创建日期进行分区等。根据序号分区建表: SQL create table dinya_test 2 ( 3 transaction_id number primary key, 4 item_id number(8) not null, 5 item_description varchar2(300), 6 transaction_date date not null 7 ) 8 partition by range (transaction_id) 9 ( 10 partition part_01 values less than(30000000) tablespace diny

13、a_space01, 11 partition part_02 values less than(60000000) tablespace dinya_space02, 12 partition part_03 values less than(maxvalue) tablespace dinya_space03 13 ); Table created.根据交易的序号,交易 ID 在三千万以下的记录将存储在第一个表空间dinya_space01 中,分区名为 :par_01,在三千万到六千万之间的记录存储在第二个表空间: dinya_space02 中,分区名为:par_02,而交易 ID 在

14、六千万以上的记录存储在第三个表空间 dinya_space03 中,分区名为 par_03. 根据交易日期分区建表: SQL create table dinya_test 2 ( 3 transaction_id number primary key, 4 item_id number(8) not null, 5 item_description varchar2(300), 6 transaction_date date not null 7 ) 8 partition by range (transaction_date) 9 ( 10 partition part_01 values

15、 less than(to_date(2006-01-01,yyyy-mm-dd) tablespace dinya_space01, 11 partition part_02 values less than(to_date(2010-01-01,yyyy-mm-dd) tablespace dinya_space02, 12 partition part_03 values less than(maxvalue) tablespace dinya_space03 13 ); Table created. 这样我们就分别建了以交易序号和交易日期来分区的分区表。每次插入数据的时候,系统将根据指

16、定的字段的值来自动将记录存储到制定的分区(表空间)中。 当然,我们还可以根据需求,使用两个字段的范围分布来分区,如partition by range ( transaction_id ,transaction_date), 分区条件中的值也做相应的改变。 Hash 分区(散列分区) 是在列值上使用散列算法,以确定将行放入哪个分区中。当列的值没有合适的条件时,建议使用散列分区。散列分区为通过指定分区编号来均匀分布数据的一种分区类型,因为通过在 I/O 设备上进行散列分区,使得这些分区大小一致。散列分区为通过指定分区编号来均匀分布数据的一种分区类型,因为通过在 I/O 设备上进行散列分区,使得这些分区大小一致。如将物料交易表的数据根据交易 ID 散列地存放在指定的三个表空间中: SQL create table dinya_test 2 ( 3 transaction_id

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 工程造价

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号