`
thinktothings
  • 浏览: 785018 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

oracle表分区(一) .

 
阅读更多

http://blog.csdn.net/sanmiyangguang/article/details/6280270

 

oracle表分区(一) .

 

 

建立分区的好处:改善表的查询性能,使表更容易管理,便于备份和恢复,提高数据安全性。

注意:分区表不能有long或者raw long 数据类型。

 

一、分类

1、range(范围)分区

2、hash(哈希)分区

3、list(列表)分区

4、组合分区range-hash range-list。

 

二、分区选择条件

1、range分区

应用范围比较广泛的表分区方式,以列的值的范围来作为分区划分条件的,将记录放到列所在的range分区中,因此在创建的时候需要指定基于的列,以及分区的范围值,如果有些记录暂时无法预测范围,可以创建maxvalue分区,所有不在指定范围的记录都会到这个maxvalue分区中,并且支持多列作为依赖列。每个分区中的数据量不均匀

2、hash分区

应用于那些无法有效划分范围的表,这样对提高性能有所帮助,hash是将数据平均分配到你指定的几个分区中,列所在的分区时依据分区列hash值自动分配的,不能控制那条值在那个分区,支持多个依赖列。

3、list分区

需要指定列的值,单个分区值可以有多个值,其分区中的值必须明确指定,不能想range中指定范围,可以确定那个值在那个分区,但是只能有一个依赖列,分区时必须确定分区列可能存在的值,一旦插入的列值不在分区范围内,则插入就会失败,因此在使用list分区时,建议创建一个default分区,用于存储那些不在指定范围内的记录,类似range的maxvalue分区。

4、组合分区

如果某表桉某列进行分区,仍然较大,或者是一些其他的需求,还可以通过分区内在建立子分区即组合分区。oracle10g中只有range-hash、range-list,根分区只能使用range分区,则分区可以是hash或者list分区。11g在组合分区功能上有所增强,range-range,list-range,list-list,list-hash,hash不能做根分区是因为数据分配是平均分配,某条记录在那个分区是不可知的。

 

三、分区创建

首先要介绍几个个数据字典表:user_part_tables、user_tab_partitions、user_tab_subpartitions

user_part_tables:记录分区表的信息

user_tab_partitions:记录表的分区信息

user_tab_subpartitions:查询表的子分区信息

 

1、range分区创建

创建一个标准的range分区表:

create table t_partition_range(id number,name varchar2(50))

paritition by range(id)(

partition t_range_p1 values less than (10) tablespace  tbspace01,

partition t_range_p2 values less than (20) tablespace  tbspace02,

partition t_range_p3 values less than (30) tablespace  tbspace03,

partition t_range_pmax values less than (maxvalue) tablespace  tbspace04

);

注:id:为分区依赖列(可以有多个,用逗号分隔)

      t_range_p1 :分区的名称

      values less than:后跟分区范围值(如果依赖列有多个,范围对应值也应是多个,中间以逗号分隔);

      tbspace03:分区的存储属性,例如所在表空间等属性(可为空),默认继承基表所在表空间的属性。

可以查看分别查看两张数据字典表有关表t_partition_range的信息。

 

2、hash分区创建

第一种方式:

create table t_partition_hash(id number,name varchar2(50))

partition by hash(id)(

partition t_hash_p1 tablespace tbspace01,

partition t_hash_p1 tablespace tbspace02,

partition t_hash_p1 tablespace tbspace03

);

第二种方式:

create table t_partition_hash2(id number,name varchar2(50))

partition by hash(id)

partitions 3 store in (tbspace01,tbspace02,tbspace03);

注:第二种方式说明可以直接指定分区数量和可供使用的表空间,表空间的数量不一定要等于分区的数量

 

3、list分区创建

create table t_partition_list (id number,name varchar2(50))
 partition by list(id)(
 partition t_list_p1 values (1,2,3,4,5,6,7,8,9) tablespace tbspart01,
 partition t_list_p2 values (10,11,12,13,14,15,16,17,18,19) tablespace tbspart02,
 partition t_list_p3 values (20,21,22,23,24,25,26,27,28,29) tablespace tbspart03,
 partition t_list_pd values (default) tablespace tbspart04);

注:list分区的依赖列只能有一个,values中的值即为id中的值。

 

4、range-hash 组合分区创建

为所有分区创建4个hash子分区

create table t_partition_rh (id number,name varchar2(50))
 partition by range(id) subpartition by hash(name)
 subpartitions 4 store in (tbspart01, tbspart02, tbspart03,tbspart04)(
 partition t_r_p1 values less than (10) tablespace tbspart01,
 partition t_r_p2 values less than (20) tablespace tbspart02,
 partition t_r_p3 values less than (30) tablespace tbspart03,
 partition t_r_pd values less than (maxvalue) tablespace tbspart04);

 

对某一个分区创建4个哈市子分区

create table t_partition_rh (id number,name varchar2(50))
 partition by range(id) subpartition by hash(name)(
 partition t_r_p1 values less than (10) tablespace tbspart01,
 partition t_r_p2 values less than (20) tablespace tbspart02,
 partition t_r_p3 values less than (30) tablespace tbspart03
 (subpartition t_r_p3_h1 tablespace tbspart01,
 subpartition t_r_p3_h2 tablespace tbspart02,
 subpartition t_r_p3_h3 tablespace tbspart03),
 partition t_r_pd values less than (maxvalue) tablespace tbspart04);

 

给各个分区创建不同的子分区:

create table t_partition_rh (id number,name varchar2(50))
 partition by range(id) subpartition by hash(name)(
 partition t_r_p1 values less than (10) tablespace tbspart01,
 partition t_r_p2 values less than (20) tablespace tbspart02
 (subpartition t_r_p2_h1 tablespace tbspart01,
 subpartition t_r_p2_h2 tablespace tbspart02),
 partition t_r_p3 values less than (30) tablespace tbspart03
 subpartitions 3 store in (tbspart01,tbspart02,tbspart03),
 partition t_r_pd values less than (maxvalue) tablespace tbspart04
 (subpartition t_r_p3_h1 tablespace tbspart01,
 subpartition t_r_p3_h2 tablespace tbspart02,
 subpartition t_r_p3_h3 tablespace tbspart03)
 );

 

分区模板应用:

在指定子分区依赖列以后,指定子分区的存储模板,各个分区即会按照子分区模式创建子分区

create table t_partition_rh (id number,name varchar2(50))
 partition by range(id) subpartition by hash(name)
 subpartition template (
 subpartition h1 tablespace tbspart01,
 subpartition h2 tablespace tbspart02,
 subpartition h3 tablespace tbspart03,
 subpartition h4 tablespace tbspart04)(
 partition t_r_p1 values less than (10) tablespace tbspart01,
 partition t_r_p2 values less than (20) tablespace tbspart02,
 partition t_r_p3 values less than (30) tablespace tbspart03,
 partition t_r_pd values less than (maxvalue) tablespace tbspart04);

 

 

5、range-list组合分区创建

其创建方式和range-hash极其相似,只是子分区是list分区,同样也可以使用分区模板

create table t_partition_rl (id number,name varchar2(50))
 partition by range(id) subpartition by list(name)
 subpartition template (
 subpartition l1 values ('aa') tablespace tbspart01,
 subpartition l2 values ('bb') tablespace tbspart02,
 subpartition l3 values ('cc') tablespace tbspart03,
 subpartition l4 values ('dd') tablespace tbspart04)(
 partition t_r_p1 values less than (10) tablespace tbspart01,
 partition t_r_p2 values less than (20) tablespace tbspart02,
 partition t_r_p3 values less than (30) tablespace tbspart03,
 partition t_r_pd values less than (maxvalue) tablespace tbspart04);

 

 

四、分区公共准则

1、如果选择的分区不能确保各个分区内记录量的基本平均,则这种分区方式有可能是不恰当的

比如对于range 分区,假设分了10 个分区,而其中一个分区中的记录数占总记录数的90%,其它9 个分区只占总记录数的10%,则这个分区方式就起不到数据平衡的作用。当然,如果你的目的并不是为了平衡,只是为了区分数据,ok,对于这种情况,我想说的是,你务必要意识到存在这个问题。

2、对于分区的表或索引,其所涉及的所有分区,其块的大小必须一致。

分享到:
评论

相关推荐

    福州采集项目_Oracle表分区实践.zip

    1. **表分区的基本概念**:Oracle表分区是将一个大表分解成多个逻辑上关联的小表,每个小表称为一个分区。这些分区可以独立存储和管理,降低了维护复杂性,提高了查询速度。Oracle支持多种分区策略,如范围分区、...

    oracle表分区详解.pdf

    Oracle数据库表分区技术是数据库管理中的一项高级功能,它允许将大表划分为更小、更易管理的部分,称为分区。在Oracle中,表空间是由一个或多个数据文件组成的集合,是数据库中用于存储数据的对象。 表分区对于大型...

    oracle创建分区表.pdf

    三、Oracle分区表的创建示例 本篇文档通过一个留言版应用的案例来说明分区表的创建和使用。案例中提到了创建独立表空间、备份旧数据、创建分区表、导入数据和分区表扩容的步骤。 1. 创建独立的表空间:这是创建分区...

    oracle分区表分区索引.docx

    Oracle 分区表分区索引是 Oracle 数据库中的一种重要机制,它可以提高数据的存储和查询效率。下面将详细介绍 Oracle 分区表分区索引的类型、分类、创建方法和维护方式。 一、分区表和分区索引的概念 分区表是指将...

    Oracle表分区管理.pdf

    Oracle表分区管理是Oracle数据库系统中一种高级的数据组织策略,用于优化大型数据库的性能和管理效率。随着数据量的增长,传统的单表管理方式会面临访问效率低、I/O竞争激烈等问题。Oracle从8i版本开始引入表分区...

    oracle表分区.[归类].pdf

    一、Oracle分区简介 Oracle分区的核心理念是“分而治之”,它将大表和索引分成多个小的逻辑单元,称为分区。这种技术有助于减少管理开销,提高查询性能,同时增强系统的并行处理能力。当某一分区发生故障时,不会...

    Oracle数据库分区管理.docx

    Oracle数据库分区管理是Oracle数据库系统中的一项高级特性,旨在优化大规模数据存储和处理的性能、可管理和可用性。自Oracle 8.0引入以来,这一技术不断演进,特别是在Oracle Database 11g 第2版中,它变得更加用户...

    oracle自动一年建立表分区.zip

    "Oracle自动一年建立表分区.zip"文件显然包含了用于自动创建按时间(一年)分区的Oracle脚本。这样的脚本对于处理大量历史数据的企业尤其有用,因为它可以帮助将大表分解成更小、更易管理和查询的部分。 表分区的...

    Oracle表分区技术总结.doc

    Oracle表分区技术是一种高效管理大型数据库表的策略,它通过将大表划分为较小的、独立的分区,提高数据管理的便捷性和性能。这一技术自Oracle8开始引入,旨在应对数据量急剧增长带来的挑战。 首先,分区技术的核心...

    Oracle表分区详解(优缺点)

    Oracle 表分区是一种高效的数据管理策略,用于处理大数据量的表,以提升查询性能和数据库的可维护性。本文将详细介绍Oracle表分区的概念、作用、优缺点,以及各种类型的分区和操作方法。 首先,理解表空间和分区表...

    oracle表分区详解

    Oracle数据库中的表分区是一种高级组织技术,它通过将表的大数据集划分为较小的、更易于管理的部分(即分区),从而提高查询性能和可管理性。表分区可以按照不同的策略进行划分,如范围分区、列表分区等。 #### 二...

    如何使用Oracle数据库分区表.pdf

    Oracle 数据库分区表的工作原理是依据分区主键而创建的多个独立的表,对应用而言它只是一个表,而在底层是由几个独立的分区组成的,每个分区具有自己独立的段标识和段的高水位线图。这样可以实现数 据分布到多个...

    利用kettle自动创建oracle表分区

    Oracle表分区是指将一个大型表分割成多个小的独立表,每个小表称为一个分区。通过分区,可以将大型表分割成多个小的独立表,从而提高查询效率和数据管理效率。Oracle表分区可以按照不同的方式进行分区,例如按照日期...

    oracle自动分区重命名.txt

    oracle按时间自动分区后,将自分区的系统名根据时间重命名。如:SYS_P20000重命名为P20190101。 输入两个参数表名 +类型 1:日 2:月 3:年 默认日期 把后面注释的执行语句释放,测试打印的时候注释了,上传的时候忘...

    深入学习分区表及分区索引(详解oracle分区).docx

    Oracle分区技术是数据库管理系统中用于优化大规模数据存储和查询性能的一种高级特性。它允许将大表和索引分成较小、更易管理和操作的部分,每个部分称为一个分区。分区的主要目标是提高查询性能、简化管理任务并增强...

    Oracle表分区详解

    Oracle数据库中的表分区是数据库管理的一种高级技术,它允许我们将大型表分解成更小、更易管理和查询的部分,从而提高数据存储和检索的效率。在本文中,我们将深入探讨Oracle表分区的各个方面,包括其重要性、类型、...

    oracle表分区详细讲解

    -- 更多分区... ); ``` - **规则说明**: 1. 每个分区都必须有`VALUES LESS THAN`子句,用于指定不包括在该分区内的上限值。 2. 除首个分区外,每个分区都有隐式下限值,即前一个分区的上限值。 3. 最高的...

    Oracle的分区技术.pptx

    以下是对Oracle分区技术的详细解释: **什么是分区?** 在Oracle数据库中,分区是将大数据对象(如表或索引)划分为多个独立的、较小的部分,每个部分称为一个分区。这些分区可以分布在不同的表空间中,并且可以...

    oracle分区表之hash分区表的使用及扩展

    Oracle分区表中的Hash分区是一种基于哈希算法的分区策略,适用于处理无法清晰定义分区范围的大型数据表。这种分区方式通过计算分区键的哈希值来决定数据存储在哪个分区,以此达到数据分散和负载均衡的目的。Hash分区...

Global site tag (gtag.js) - Google Analytics