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

Oracle 表分区机制介绍

 
阅读更多

 

      一. 概念

      一个表被分成了很多个独立的分区,那么每一个分区应该存储哪些数据,这就是表分区机制要解决的问题。

 

      二. 表分区机制概述

      目前oracle中有四种分区机制:

      1. 区间分区:可以指定应当存储在一起的数据区间。例如,时间戳在Jan-2005内的所有记录都存储在分区1中,时间戳在Feb-2005内的所有记录都存储在分区2中,依此类推。

      2. 散列分区:这是指在一个列(或多个列)上应用一个散列函数,行会按这个散列值放在某个分区中。具有很大随机性,你不知道数据会被散列到哪个分区中去,但是一般每个分区存储的数据都差不多大小。

      3. 列表分区:指定一个离散值集,来确定应当存储在一起的数据。例如,可以指定STATUS列值在(’A’,’M’,’Z’)中的行放在分区1中,STATUS值在(‘D’,’P’,’Q’)中的行放在分区2中,依此类推。

      4. 组合分区:这是区间分区和散列分区的一种组合,或者是区间分区与列表分区的组合。通过组合分区,你可以先对某些数据应用区间分区,再在区间中根据散列或列表来选择最后的分区。

 

      三. 各种分区机制介绍

      1. 区间分区

       建表语句示例:(用得最频繁)

 

CREATE TABLE range_example
 ( range_key_column date ,
 data varchar2(20)
 )
 PARTITION BY RANGE (range_key_column)
 ( PARTITION part_1 VALUES LESS THAN
 (to_date('01/01/2005','dd/mm/yyyy')),
 PARTITION part_2 VALUES LESS THAN
 (to_date('01/01/2006','dd/mm/yyyy')),
 PARTITION part_3 VALUES LESS THAN
 (MAXVALUE)
 )

      这样,日期小于2005年的数据放在part_1分区,日期是2005年的数据放在part_2分区,日期大于2005年的数据放在part_3分区。

 

      2. 散列分区

      对一个表执行散列分区时,oracle会对分区键运用一个散列函数,依此确定数据应该放在N个分区中哪一个。Oracle建议N是2的一个幂(2,4,8,16等),从而得到最佳的总体分布。

      散列分区是为了使数据尽可能均匀地分布在多个不同的分区上,选择分区键非常重要,如果选得不好,数据就会分布不均。建议分区键应该是唯一的列(比如主键)或者唯一的一组列(多列组成的主键)。 假如你选择的分区键只可能有4个相异的值,并使用2个分区,那么可能将所有的数据散列到同一分区上。

     创建散列分区表示例:

 

CREATE TABLE hash_example
 ( hash_key_column date,
 data varchar2(20)
 )
 PARTITION BY HASH (hash_key_column)
 ( partition part_1 tablespace p1,
 partition part_2 tablespace p2
 )

 

      3. 列表分区

      列表分区(list partitioning)是Oracle9i Release 1的一个新特性。它提供了这样一种功能,可以根据离散的值列表来指定一行位于哪个分区。如果能根据某个代码来进行分区(如州代码或区代码),这通常很有用。例如,你可能想把Maine州(ME)、New Hampshire州(NH)、Vermont州(VT)和Massachusetts州(MA)中所有人的记录都归至一个分区中,因为这些州相互之间挨得很近,而且你的应用按地理位置来查询数据。类似地,你可能希望将Connecticut州(CT)、Rhode Island州(RI)和New York州(NY)的数据分组在一起。

     SQL代码示例:

 

 create table list_example
 ( state_cd varchar2(2),
 data varchar2(20)
 )
 partition by list(state_cd)
 ( partition part_1 values ( 'ME', 'NH', 'VT', 'MA' ),
 partition part_2 values ( 'CT', 'RI', 'NY' )
)

    这样创建之后,如果想插入不在这七个地方的数据就会报错。比如:insert into list_example values ( 'VA', 'data' );这个时候应该加一个默认分区,SQL如下:

 

alter table list_example
 add partition
 part_3 values ( DEFAULT );

    但是表一旦有了默认分区,不可以继续添加其他分区了,因为默认分区可能包含其他分区的数据。

 

    4. 组合分区

     其实就是上述分区的组合,区间分区加散列分区,区间分区加列表分区。就是区间分区之后,感觉每一个分区数据量还是很大,继续在分区上进行分区。代码示例如下:

 

     区间分区加散列分区

CREATE TABLE composite_example
 ( range_key_column date,
 hash_key_column int,
 data varchar2(20)
 )
  PARTITION BY RANGE (range_key_column)
 subpartition by hash(hash_key_column) subpartitions 2
 (
 PARTITION part_1
 VALUES LESS THAN(to_date('01/01/2005','dd/mm/yyyy'))
 (subpartition part_1_sub_1,
 subpartition part_1_sub_2
 ),
 PARTITION part_2
 VALUES LESS THAN(to_date('01/01/2006','dd/mm/yyyy'))
 (subpartition part_2_sub_1,
 subpartition part_2_sub_2
 )
 )

 

     区间分区加列表分区

 

CREATE TABLE composite_range_list_example
 ( range_key_column date,
 code_key_column int,
 data varchar2(20)
 )
 PARTITION BY RANGE (range_key_column)
 subpartition by list(code_key_column) 697 / 860
 (
 PARTITION part_1
 VALUES LESS THAN(to_date('01/01/2005','dd/mm/yyyy'))
 (subpartition part_1_sub_1 values( 1, 3, 5, 7 ),
 subpartition part_1_sub_2 values( 2, 4, 6, 8 )
 ),
 PARTITION part_2
 VALUES LESS THAN(to_date('01/01/2006','dd/mm/yyyy'))
 (subpartition part_2_sub_1 values ( 1, 3 ),
 subpartition part_2_sub_2 values ( 5, 7 ),
 subpartition part_2_sub_3 values ( 2, 4, 6, 8 )
 )
 )

 

    总之,,如果可以按某个属性自然地对数据完成区间分区,就应该使用区间分区,而不是散列分区或列表分区。散列和列表分区能提供分区的许多突出优点,但是在分区消除方面都不如区间分区有用。如果所得到的区间分区太大,不能很好地管理;或者如果你想使用所有PDML功能或对一个区间分区使用并行索引扫描,则建议在区间分区中再使用散列或列表分区。

 

0
1
分享到:
评论

相关推荐

    oracle分区表分区索引.docx

    下面将详细介绍 Oracle 分区表分区索引的类型、分类、创建方法和维护方式。 一、分区表和分区索引的概念 分区表是指将一个大型表分割成多个小表,每个小表称为一个分区。分区表可以根据不同的方式进行分区,例如...

    Oracle表分区总结

    Oracle表分区总结 Oracle中提供了对表进行分区的机制,通过表分区,可以将表空间中数据按照某种方式分别存放到特定的分区中。

    Oracle 分区表自动维护脚本

    整体来看,Oracle分区表自动维护脚本通过利用数据库的调度机制和自动化执行一系列维护任务,有助于确保数据库表的数据分区得到及时和正确的维护管理。对于大型的OLTP和数据仓库系统,这种自动化脚本可以显著减轻...

    Oracle分区表和分区索引在VLDB中的研究.pdf

    "Oracle分区表和分区索引在VLDB中的研究" 本文研究了Oracle分区表和分区索引在VLDB(Very Large Databases)中的应用。分区表和分区索引是数据库管理中的关键技术之一,是VLDB中一个重要的性能提升机制。通过分析一...

    Oracle分区表和锁的应用

    1. **分区概念**:Oracle分区表是将一个大表逻辑上划分为多个较小的部分,每个部分称为一个分区。每个分区都有自己的索引和维护操作,这使得对大规模数据的操作变得高效和便捷。 2. **分区类型**: - **范围分区**...

    Oracle锁和表分区

    Oracle数据库系统中,锁和表分区是两个关键的管理数据并发和优化性能的机制。首先,我们来深入了解锁的概念。 1. **锁定机制**:锁定是数据库管理系统中用于控制并发访问的一种方法,确保多用户环境下的数据完整性...

    oracle中锁和表分区

    Oracle数据库中的锁和表分区是两个重要的概念,它们在数据管理与并发控制中起到关键作用。锁用于确保数据的一致性和完整性,而表分区则是一种优化查询性能的技术。 首先,让我们详细了解一下锁。在Oracle中,锁是...

    基于Oracle表分区技术的HIS系统优化.pdf

    综上所述,Oracle表分区技术是解决大数据环境下关系型数据库性能瓶颈的有效手段,尤其在HIS系统中,能够提供高效的数据处理能力和灵活的管理机制。通过合理规划和实施,可以显著提升系统的响应速度和整体性能,满足...

    深入oracle分区索引的详解

    局部索引一定是分区索引,分区键等同于表的分区键,分区数等同于表的分区数,一句话,局部索引的分区机制和表的分区机制一样。2.如果局部索引的索引列以分区键开头,则称为前缀局部索引。3.如果局部索引的列不是以...

    oracle_分区表数据定期迁移到其他数据库测试方案

    本文档中的迁移方案旨在实现将Oracle分区表中的数据定期迁移到另一个数据库。这样的需求可能出于多种考虑,比如数据归档、负载均衡或数据同步等。 ### 三、Oracle 分区表迁移方案概述 该方案主要包括以下几个步骤...

    Oracle分区表详细讲解.ppt

    Oracle分区表是 Oracle 数据库中的一种存储机制,用于将大型表拆分为多个小型表,提高查询性能和数据维护效率。分区表的出现是为了解决大型表带来的性能瓶颈问题。 分区表的优点包括: * 提高查询性能:分区表可以...

    Oracle Partitioning – 数据分区技术介绍

    综上所述,Oracle分区技术随着时间的发展不断完善和进步,已经成为处理大规模数据集的关键技术之一。通过对表进行适当的分区,不仅可以显著提升查询性能,还能大幅简化数据管理任务,确保数据库系统的高可用性和高效...

    Oracle的hints调整机制介绍

    Oracle的Hints调整机制是数据库管理员和开发人员用来指导Oracle Cost-Based Optimizer(CBO)做出更符合预期执行计划的一种方式。Hints是一种在SQL查询中插入的特殊注释,用于告诉Oracle如何优化查询路径,以提高...

    oracle 间隔分区

    标题与描述均提到了"oracle 间隔分区",这指向了Oracle数据库中一种高级的数据管理技术,即间隔分区(Interval Partitioning)。...同时,自动化的分区机制减少了管理员的工作负担,提高了数据管理的效率和灵活性。

    分区索引,本地索引,全局索引的区别

    - **分区机制**:全局索引的分区机制与表的分区机制不相同,这意味着一个全局索引分区可能指向多个表分区,反之亦然。 - **唯一性**:全局索引支持表级的唯一性约束,而不只是分区级别的唯一性。 - **维护成本**:...

    ch05 oracle锁与表分区

    在Oracle数据库系统中,"锁"和"表分区"是两个关键的概念,它们对于数据库的并发控制和数据管理起着至关重要的作用。本篇将详细探讨这两个主题。 首先,我们来了解一下"锁"。在多用户环境下,Oracle数据库使用锁机制...

    Oracle_Database_11g_Release_2分区功能详解

    2. **分区扩展**:随着业务需求的变化和技术的进步,分区机制也需要不断扩展和完善,以便更好地支持新的应用场景。 3. **分区顾问**:Oracle 11g提供了分区顾问工具,帮助用户根据实际业务情况选择最佳的分区方案。...

    Oracle数据库分区优化技术研究与应用.pdf

    分区机制是指将大型数据库对象分解为多个小的、易于管理的实体,以提高数据库性能和可用性。该机制可以将大型数据库对象分解为多个小的、独立的实体,每个实体可以独立地进行维护和优化,从而提高数据库性能和可用性...

Global site tag (gtag.js) - Google Analytics