`
liwenshui322
  • 浏览: 513782 次
  • 性别: 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表分区总结

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

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

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

    深入oracle分区索引的详解

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

    Oracle分区表详细讲解.ppt

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

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

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

    Oracle分区表(Partition Table)使用详解

    本课程详细介绍了Oracle数据库的分区表机制、分区表应用场景、分区表与分区索引类型/创建/维护操作、分区裁剪等,结合大量的案例程序,对Oracle分区表的使用进行了详细的分析讲解。

    高性能动态SQL Oracle数据安全 Oracle 数据库的聚簇技术 等等

    Oracle分区功能提高应用程序性能 79 Oracle数据库处理时间基本准则 81 入侵Oracle数据库常用操作命令 82 Oracle数据库优化及其应用程序研究 83 Instance实例和数据库 85 Oracle数据缓冲区内部机制 85 Oracle 9i...

    oracle9i oracle11g oracle10g 性能调优 基础学习 视频地址

    1z0-033-11(B) 发布不同oracle文件的原因 诊断表空间 表空间分区原因 检查点工作 检查点优化 调整重做日志 13 1z0-033-13 关于自动段空间管理 ext 与oracle 空间使用 percent oracle块参数 行迁移问题 什么时间进行...

    oracle数据库题库.pdf

    Oracle数据库分区表是指将大型表分割成多个小表,用于提高数据的管理和查询效率。分区表可以根据不同的列和条件来分区。 以上是Oracle数据库题库.pdf中涵盖的重要知识点。 Oracle数据库管理员需要具备这些知识点,...

    Oracle 40 道面试题及答案.docx

    如果数据中有空值,Oracle 机制会自动将其规划到 maxvalue 的分区中。 散列分区(哈希分区)是根据字段的 hash 值进行均匀分布,尽可能地实现各分区所散列的数据相等。 Oracle 采用哈希码技术分区,具体分区如何由 ...

    ORACLE 原理培训.pptx

    1. 分区表(Partitioning):ORACLE 11G 引入了分区表的概念,可以将大表分割成多个小表,提高查询性能。 2. 数据压缩(Data Compression):ORACLE 11G 支持数据压缩,可以减少存储空间和提高查询性能。 3. 高级...

    Oracle执行计划1.ppt

    Oracle 执行计划是 Oracle 数据库中的一种机制,用于优化 SQL 语句的执行过程。它决定了如何访问存储器,得到需要的结果集。执行计划的主要内容包括访问方式和访问顺序。 Oracle 执行计划的生成方式有三种:Explain...

    ORACLE9i_优化设计与系统调整

    §10.9 是否采用簇和分区 116 §10.10 表和索引的空间预分配 116 §10.11 确定数据库对象存储大小 117 §10.11.1 非簇表的大小计算 117 §10.11.2 索引大小计算 119 §10.11.3 簇表的大小计算 120 §10.11.4 位图...

    甲骨文数据库oracle个人学习(基础理论)[整理].pdf

    数据库性能优化是为了提高数据库的运行效率,可以通过索引、分区、缓存等方法来实现 3. 数据库安全 数据库安全是为了保护数据库免受非法访问和修改,可以通过用户身份验证、权限控制、加密等方法来实现 4. 数据库...

    顶级DBA漫谈Oracle Rman备份与恢复

    不完全恢复可以恢复部分数据,例如某个表或某个分区。 归档与非归档 Oracle RMAN支持两种类型的备份:归档备份和非归档备份。归档备份是指备份数据库的归档redo日志文件,而非归档备份是指备份数据库的数据文件。 ...

    Oracle 9i&10g编程艺术:深入数据库体系结构(全本)含脚本

    13.2.6 表分区机制小结 585 13.3 索引分区 586 13.3.1 局部索引与全局索引 587 13.3.2 局部索引 587 13.3.3 全局索引 594 13.4 再论分区和性能 610 13.5 审计和段空间压缩 617 13.6 小结 618 第14章 并行...

    Oracle从基础到熟练(太实用了)

    锁,表分区 ①:锁的概念 ②:并发问题 ③:锁机制 ④:锁的类型 ②:常见分区 六.数据库对象管理 ①:同义词 ②:序列 ③:视图 ④:索引 七.PL/SQL基础 ①:什么是PL/SQL ②:集合 ③:动态SQL ④:条件语句 ⑤:...

    ORACLE数据库体系结构、安全性策略浅析.pdf

    4. 可扩展性:ORACLE 数据库支持可扩展性,包括水平分区、垂直分区和数据仓库等。 四、结论 ORACLE 数据库是一种关系型数据库管理系统,具有高性能、高可用性和高安全性。了解 ORACLE 数据库的体系结构和安全性...

Global site tag (gtag.js) - Google Analytics