热门标签 | HotTags
当前位置:  开发笔记 > 人工智能 > 正文

ORACLE各种PARTITION的分析

ORACLE各种PARTITION的分析ORACLE为构建数据仓库提供了4种类型的分区方法:RangePartition,HashPartition,ListPartition,CompositePartition.下面我分别对这四种分区方法的概念,他们的使用场景,...Synt
ORACLE各种PARTITION的分析
 
ORACLE 为构建数据仓库提供了4种类型的分区方法:Range Partition ,Hash Partition ,List Partition,Composite Partition. 
下面我分别对这四种分区方法的概念,他们的使用场景,以及各种分区方法做一个性能比较。 
一:概念 
1:Range Partitioning 
这是最常用的一种分区方法,基于COLUMN的值范围做分区,最常见的是基于时间字段的数据的范围的分区,比如:对于SALE表,可以对销售时间按照月份做一个Range Partitioning。这种分区在数据仓库里用的比较多,以下是CREATE STATMENT 
CREATE TABLE sales_range 
(salesman_id  NUMBER(5), 
salesman_name VARCHAR2(30), 
sales_amount  NUMBER(10), 
sales_date    DATE) 
COMPRESS 
PARTITION BY RANGE(sales_date) 
(PARTITION sales_jan2000 VALUES LESS THAN(TO_DATE('02/01/2000','DD/MM/YYYY')), 
PARTITION sales_feb2000 VALUES LESS THAN(TO_DATE('03/01/2000','DD/MM/YYYY')), 
PARTITION sales_mar2000 VALUES LESS THAN(TO_DATE('04/01/2000','DD/MM/YYYY')), 
PARTITION sales_apr2000 VALUES LESS THAN(TO_DATE('05/01/2000','DD/MM/YYYY'))); 
对于COMPRESS关键字的理解,将在后续的压缩分区讲到 
 
2;Hash Partitioning 
Hash Partitioning映射数据到基于HASH算法的分区上,HASH算法将应用你指定的分区关键字,平均的分那些在Partitions中的行。给每一个分区近似相同的大小,要保证数据能平均分配,分区数一般是2N。比如说,需要insert sales_hash 一条数据,ORACLE会通过HASH算法处理salesman_id,然后找到对于的分区表进行insert。Hash Partitioning 是为跨越设备的分布式数据提供了一种理想的方法,HASH算法也很容易转化成RANGE分区方法,特别是当被分区的数据不是历史数据时。 
CREATE TABLE sales_hash 
(salesman_id  NUMBER(5), 
salesman_name VARCHAR2(30), 
sales_amount  NUMBER(10), 
week_no       NUMBER(2)) 
PARTITION BY HASH(salesman_id) 
PARTITIONS 4; 
 
3:List Partitioning 
List Partitioning能够让你明确的控制有多少行被分区,你能对要分区的COLUMN上明确的指定按照那些具体的值来分区,这种方式在Range和Hash方式是做不到的。这种方式的优点是,你能组织和分组那些没有顺序和没有关系的数据集。下面是通过销售地区做一个List分区表。 
CREATE TABLE sales_list 
(salesman_id  NUMBER(5), 
salesman_name VARCHAR2(30), 
sales_state   VARCHAR2(20), 
sales_amount  NUMBER(10), 
sales_date    DATE) 
PARTITION BY LIST(sales_state) 
(PARTITION sales_west VALUES('California', 'Hawaii') COMPRESS, 
PARTITION sales_east VALUES('New York', 'Virginia', 'Florida'), 
PARTITION sales_central VALUES('Texas', 'Illinois')); 
 
4:Composite Partitioning 
Composite Partitioning 是把Range ,Hash ,List 分区方式组合起来的分区方式。 
比如Composite Range-Hash Partitioning和Composite Range-List Partitioning: 
CREATE TABLE sales_range_hash( 
  s_productid  NUMBER, 
  s_saledate   DATE, 
  s_custid     NUMBER, 
  s_totalprice NUMBER) 
PARTITION BY RANGE (s_saledate) 
SUBPARTITION BY HASH (s_productid) SUBPARTITIONS 8 
(PARTITION sal99q1 VALUES LESS THAN (TO_DATE('01-APR-1999', 'DD-MON-YYYY')), 
  PARTITION sal99q2 VALUES LESS THAN (TO_DATE('01-JUL-1999', 'DD-MON-YYYY')), 
  PARTITION sal99q3 VALUES LESS THAN (TO_DATE('01-OCT-1999', 'DD-MON-YYYY')), 
  PARTITION sal99q4 VALUES LESS THAN (TO_DATE('01-JAN-2000', 'DD-MON-YYYY'))); 
另外你还可以用subpartition template的方式指定: 
CREATE TABLE sales_range_hash( 
  s_productid  NUMBER, 
  s_saledate   DATE, 
  s_custid     NUMBER, 
  s_totalprice NUMBER) 
PARTITION BY RANGE (s_saledate) 
SUBPARTITION BY HASH (s_productid) 
SUBPARTITION TEMPLATE( 
SUBPARTITION sp1 TABLESPACE tbs1, 
SUBPARTITION sp2 TABLESPACE tbs2, 
SUBPARTITION sp3 TABLESPACE tbs3, 
SUBPARTITION sp4 TABLESPACE tbs4, 
SUBPARTITION sp5 TABLESPACE tbs5, 
SUBPARTITION sp6 TABLESPACE tbs6, 
SUBPARTITION sp7 TABLESPACE tbs7, 
SUBPARTITION sp8 TABLESPACE tbs8) 
(PARTITION sal99q1 VALUES LESS THAN (TO_DATE('01-APR-1999', 'DD-MON-YYYY')), 
   PARTITION sal99q2 VALUES LESS THAN (TO_DATE('01-JUL-1999', 'DD-MON-YYYY')), 
   PARTITION sal99q3 VALUES LESS THAN (TO_DATE('01-OCT-1999', 'DD-MON-YYYY')), 
   PARTITION sal99q4 VALUES LESS THAN (TO_DATE('01-JAN-2000', 'DD-MON-YYYY'))); 
这样,没有子分区通过的HASH分区将会统一到不同的表空间。 
 
二:使用各种分区方法的场景 
1:什么时候用Range Partition 
Range Partition是一种方便的方法分区历史的数据,经常在DATE COLMUN通过时间间隔组织数据。比如说:你要查询2009年8月的数据,查询将直接找到2009年8月的分区,避免了大量不必要的数据扫描。 
在处理周期性的load新数据和purge老数据的时候,Range Partition也是一个理想的选择。 
应用场景: 
   a)有一个大表需要通过时间字段频繁的访问,通过这个时间字段做RANG PARTITION 有利于做分区裁剪。 
   b)如果你不能对一个大表在指定的时间内做备份或RESTORE,你可以通过RANGE把他们分成小的logic片来做。
 
2:什么时候用HASH Partition 
HASH Partition不是一个很好的管理历史的方法。 
应用场景 
   a)增加大表的可用性。 
   b)避免各个分区之间查找数据,并且各个分区可以放在不同的设备上,达到最大的I0吞吐量。也可以用STORE IN 子句分配每个分区到不同的表空间。 
 
3:什么时候用LIST Partition 
如果你想映射数据到离散的值的时候,LIST Partition是个比较好的选择。 
 
4:什么时候用Composite Range-Hash Partitioning 
这是Range和Hash的组合使用,先对表用RANGE分,然后对每个RANGE再做HASH分区。 
由于做了RANGE后的子分区是没有规律的,如果在数据仓库设计时候,通过查询需求觉得有必要再细分,可以考虑使用。ORACLE会把子分区又分成不同的SEGMENT
 

推荐阅读
  • 计算机网络复习:第五章 网络层控制平面
    本文探讨了网络层的控制平面,包括转发和路由选择的基本原理。转发在数据平面上实现,通过配置路由器中的转发表完成;而路由选择则在控制平面上进行,涉及路由器中路由表的配置与更新。此外,文章还介绍了ICMP协议、两种控制平面的实现方法、路由选择算法及其分类等内容。 ... [详细]
  • 本文探讨了MariaDB在当前数据库市场中的地位和挑战,分析其可能面临的困境,并提出了对未来发展的几点看法。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • 该平台旨在为大型企业提供一个高效、灵活且可扩展的分布式微服务架构解决方案。它采用模块化、微服务化和热部署的设计理念,结合当前最先进且无商业限制的主流开源技术,如Spring Cloud、Spring Boot2、MyBatis、OAuth2和Element UI,实现前后端分离的系统管理平台。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 深入解析:阿里实战 SpringCloud 微服务架构与应用
    本文将详细介绍 SpringCloud 在微服务架构中的应用,涵盖入门、实战和案例分析。通过丰富的代码示例和实际项目经验,帮助读者全面掌握 SpringCloud 的核心技术和最佳实践。 ... [详细]
  • 本文详细介绍了Git分布式版本控制系统中远程仓库的概念和操作方法。通过具体案例,帮助读者更好地理解和掌握如何高效管理代码库。 ... [详细]
  • 随着网络安全威胁的不断演变,电子邮件系统成为攻击者频繁利用的目标。本文详细探讨了电子邮件系统中的常见漏洞及其潜在风险,并提供了专业的防护建议。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 探讨架构师在项目中应如何平衡对产品的关注和对团队成员的关注,以实现最佳的开发成果。 ... [详细]
author-avatar
0o可人儿o0_962
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有