下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922
论坛 >大数据 >Oracle 11g分区的方法介绍

Oracle 11g分区的方法介绍

好汉发布于 2015-10-17 22:15查看:641回复:10

  数据库分区是每种数据库都需具备的关键功能之一。几乎所有的都使用分区功能来提高查询的性能,分区功能可以简化数据库的日常管理维护工作,大大减轻了(数据库设计和管理工程师)的工作负担。    

      分区是探索数据仓库技术选项之一,几乎所有的数据库都使用了分区技术来改善查询的性能,并减轻日常维护的复杂性,从11G开始,提供了更多的分区选项,这些选项大大地减轻了DBA的负担。
本文应该对工作在一个数据仓库环境中的DBA和开发人员有帮助,Oracle 11g提供的新特性应该增强了分区选项,并为分区使用和维护提供更大的灵活性。
分区表首先是在Oracle 8i中引入的,Oracle是第一个支持物理分区的RDBMS厂商,(2000)和都只提供了逻辑分区(使用UNION ALL视图),SQL Server 2005还不能直接支持物理分区(通过分区函数实现的),Oracle中的分区选项因其对性能的改善非常明显、可管理性、应用程序可用性以及更重要的DSS应用程序而在用户团体中压倒性地被用户广泛接受,这个特性受到广泛赞赏导致通过后来的发行频繁地得到增强。
下面的表列出了每个版本中包括的分区特性(高水平):

Oracle版本Office:office" ?>

分区特性

8.0.5

引入范围分区

8i

引入哈希和混合范围-哈希分区

9i

引入列表分区,混合范围-列表分区

10g

引入范围,列表和索引组织表的哈希分区,还引入了其他混合分区类型

11g

引入分区扩展:

l         间隔分区

l         REF分区

l         基于列的虚拟分区

l         分区顾问




分区类型
让我们简单地讨论一下上面提到的每个特性:
范围分区:数据是基于某个分区键范围的值分散的,例如,如果我们选择一个数据列作为分区键,分区“JAN-2007”将包括所有在01-JAN-2007和31-JAN-2007之间的分区键值行(假设分区范围是从月份的第一天到该月的最后一天)。
哈希分区:应用到分区键的哈希算法决定了给出行的分区,它提供了I/O均衡,但是不能用于范围或不等式查询。
列表分区:数据分布是通过分区键的一串值定义的,这对不连续的列表非常有用,如:区域、状态等。
混合分区:有两个数据分布办法用于创建混合分区,表首先通过第一个数据分布办法进行初始化分区,然后每个分区再通过第二个办法分成子分区,下面列出了可用的混合分区类型:
范围-哈希,范围-列表,范围-范围,列表-范围,列表-列表,列表-哈希。
在10g中索引组织表(表的索引和数据存储在一起)支持通过范围、列表或哈希进行分区,然而,混合分区在索引组织表上不受支持。
间隔分区:在11g中才引入,间隔分区是对范围分区的扩展,为等距范围分区提供了自动化,分区创建为元数据,只有分区开始部分是不变的,附加的段是当数据抵达时才分配的,附加分区和本地索引是自动创建的。

SQL>CREATE TABLE SALES_PART            (TIME_ID    NUMBER,              REGION_ID NUMBER,              ORDER_ID NUMBER,                  ORDER_DATE DATE,                  SALES_QTY 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分区:这个分区方案假设关联表能从相同的分区策略中受益,子表通过PK-FK(主键-外键)关系继承主表的策略,它不需要分区键存储在子表中,通过PARTITION BY REFERENCE关键字指定,子表继承主表的分区策略。
基于列的虚拟分区:在Oracle以前的版本中,只有分区键物理存在于表中才能对表进行分区,在11g中引入一个新的特性“虚拟列”移除了这个限制,允许分区键通过使用一个或多个表的列的表达式进行定义,虚拟列仅作为元数据存储。如:向表ACCOUNTS添加一个虚拟列:

SQL>CREATE 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,2))); 使用虚拟列作为分区键: SQL>CREATE 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,2))) partition by list (acc_branch);

分区顾问
Oracle 11g也提供了分区顾问,它支持生成分区建议,与10g中为物理视图、物理视图日志和索引提供建议类似,实际上,分区顾问是中SQL访问顾问的一部分,这个顾问帮助生成建议,它将预先收集实施分区后的性能,它还生成创建高效分区的脚本,可以手动通过SQL*plus或通过企业管理器队列提交给Oracle。

上面就是小编对Oracle 11g分区方法的总结,需要可以登录课课家官网查看视频。


收藏(0)0
查看评分情况

全部评分

此主贴暂时没有点赞评分

总计:0

回复分享

共有10条评论

  • 慧星的那一夜
  • Real Madrid
  • 药师
  • mr jack
  • YUI
  • Mr ken
  • Mright
  • cappuccino
  • 课课家技术团队1
  • love洒脱留守
  • 酸酸~甜甜
  • 课课家团队03
  • K哥馆
  • 选择版块:

  • 标题:

  • 内容

  • 验证码:

  • 标题:

  • 内容

  • 选择版块:

移动帖子x

移动到: