Oracle分区技术

合集下载

oracle的list表分区注意事项

oracle的list表分区注意事项

oracle的list表分区注意事项以Oracle的List表分区注意事项为标题,写一篇文章在Oracle数据库中,表分区是一种将大型表分割为更小、更可管理的部分的技术。

这可以提高查询性能、简化数据维护和管理,并且可以根据特定的业务需求进行灵活的数据访问和操作。

本文将重点介绍Oracle的List表分区,并提供一些需要注意的事项。

一、什么是List表分区List表分区是一种基于指定的列值进行分区的方法。

它允许我们根据预定义的列表值将表中的数据分割成多个分区。

每个分区都包含一个或多个特定的列表值,这些值由用户在创建表时指定。

通过将数据分散到不同的分区中,我们可以更有效地管理和查询数据。

二、List表分区的好处1. 提高查询性能:通过将数据分散到不同的分区中,可以减少查询的数据量,从而提高查询性能。

2. 简化数据维护和管理:由于数据被分割成多个分区,可以更容易地对特定的分区进行维护和管理,而无需对整个表进行操作。

3. 灵活的数据访问和操作:List表分区允许我们根据特定的列表值对数据进行访问和操作,这样可以更灵活地满足不同的业务需求。

三、List表分区的注意事项在使用List表分区时,有一些需要注意的事项,以确保分区的有效和正确运行。

1. 分区列选择:选择适合的分区列非常重要。

分区列应该是经常用于查询和过滤的列,同时也应具有较高的区分度。

这样可以确保数据在分区中分布均匀,避免数据倾斜问题。

2. 分区值定义:在创建表时,需要明确指定每个分区所包含的列表值。

这些值应该是互斥的,不能存在重叠的情况。

否则,可能会导致数据重复或无法查询的问题。

3. 分区的命名规范:为每个分区指定一个有意义的名称是非常重要的。

这样可以更容易地识别和理解每个分区的含义,以及与特定业务需求的对应关系。

4. 分区的数量和大小:根据数据量和查询需求,合理确定分区的数量和大小。

过多的分区可能会导致管理和维护的复杂性增加,而过少的分区可能无法满足性能和灵活性的要求。

Oracle 分区表的优点

Oracle 分区表的优点

ORACLE 表分区表分区的好处和事处理表分区描述表分区(partition):表分区技术是在超大型数据库(VLDB)中将大表及其索引通过分区(patition)的形式分割为若干较小、可管理的小块,并且每一分区可进一步划分为更小的子分区(sub partition)。

而这种分区对于应用来说是透明的。

Oracle的表分区功能通过改善可管理性、性能和可用性,从而为各式应用程序带来了极大的好处。

通常,分区可以使某些查询以及维护操作的性能大大提高。

此外,分区还可以极大简化常见的管理任务,分区是构建千兆字节数据系统或超高可用性系统的关键工具。

分区功能能够将表、索引或索引组织表进一步细分为段,这些数据库对象的段叫做分区。

每个分区有自己的名称,还可以选择自己的存储特性。

每个分区都是一个独立的段(SEGMENT),可以存放到相同(不同)的表空间中。

从数据库管理员的角度来看,一个分区后的对象具有多个段,这些段既可进行集体管理,也可单独管理,这就使数据库管理员在管理分区后的对象时有相当大的灵活性。

但是,从应用程序的角度来看,分区后的表与非分区表完全相同,使用SQL DML 命令访问分区后的表时,无需任何修改。

(对于高效率查询是有影响,主要差别是对某一分区数据时行查询时和对整体数据进行查询)表分区的好处通过对表进行分区,可以获得以下的好处:1)增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用;2)维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可;3)均衡I/O:可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能;4)改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。

分区表事务操作的时候,指定了分区,系统在执行的时候则只操作该分区的记录,提高了数据处理的速度。

不要指定分区直接操作数据也是可以的。

在分区表上建索引及多索引的使用和非分区表一样。

此外,因为在维护分区的时候可能对分区的索引会产生一定的影响,可能需要在维护之后重建索引,相关内容请参考分区表索引部分的文档缺点分区表相关:已经存在的表没有方法可以直接转化为分区表。

Oracle分区技术研究及实现

Oracle分区技术研究及实现
r pi l .To s l e t r b e ha a d i n i t n nc ft age tbls h aa a e ha n d c d t e a dy o v he p o l mst th n l ng a d ma n e a e o l r a e ,t e d t b s si  ̄o u e h he pa tto e h o o y n t i pe ,i n r d e e kn wld e o r ce pa tto tbl rii n、nd x pa tt n rii n tc n l g .I h spa r ti to uc s t o e g fo a l rii n、 h a epa to i e ri o t i a d ho t k ri on , nds wsa x mpl a l riin. n w o ma epa t s a ho n e a t i eof Or cepatto
的使 用和 维护 问题 , 据 库 引入 了分 区技 术。 全 文介 绍 了 O al 数 rce数据 库 分 区 的概 念 、 分 区、 引分 区以及 表 索
分 区策略, 并结合实例给 出了O al 数据库分 区具体应用。 r e c 关键词 : 数据 库 ; 据表 ; al; 区 数 r O ce分


P a c a d i p le t t n o O a l P r t n T c n l g ese r h n le- n i f n r a o c e a t i e h o y i o o
王时绘 李正君
Wa gS ig u i hn jn n hn h iL e gu Z
2Mah mais n o ue olg , b i nv ri , u e Wu a 3 0 2 . te t dC mp t C l e Hu e U ies H b i h n 0 6 ) ca r e y t 4

oracle的partition by函数

oracle的partition by函数

oracle的partition by函数标题:深入剖析Oracle的Partition By函数导言:Oracle数据库是目前企业级应用中最常用的关系型数据库之一,其功能丰富且强大。

在处理大规模数据时,为了提高查询效率和管理数据的灵活性,分区技术成为了一个重要的手段。

Partition By函数作为分区方案中的核心组成部分,在Oracle数据库中具有重要作用。

本文将深入剖析Oracle 的Partition By函数,一步一步回答您关于该函数的疑问。

第一部分:什么是分区?首先,我们需要了解什么是分区。

分区是指将数据库中的表或索引分割成多个较小的部分,成为分区子表(Partition)。

每个分区子表可以独立地存储在不同的位置,可以有不同的物理结构,甚至可以存储在不同的磁盘上。

通过将数据分割成较小的分区,可以提高查询效率、降低维护成本、加快备份和恢复速度等优点。

第二部分:Partition By函数的作用是什么?Partition By函数是Oracle数据库中用于对查询结果进行分区处理的一种函数。

它可以按照指定的列对查询结果进行分区,并将结果按照分区进行分组。

Partition By函数常常与窗口函数一起使用,以实现更为复杂的查询需求。

它可以用于对数据进行排序、分组和统计等操作,增加了查询的灵活性和功能性。

第三部分:Partition By函数使用方法1. Partition By函数的语法结构Partition By函数的语法结构如下:SELECT 列1, 列2, ... 列n, 函数() OVER (PARTITION BY 列x ORDER BY 列y) FROM 表;其中,列1、列2、...列n表示要查询的列名,函数()表示需要对查询结果进行的操作,而列x和列y是用于指定分区的列和排序的列。

通过PARTITION BY子句指定分区列,并通过ORDER BY子句指定排序列。

2. Partition By函数的功能Partition By函数可以实现以下功能:- 数据分组:通过将查询结果按照指定的列进行分组,可以对分组后的数据进行聚合统计等操作,从而得到更加精确的分析结果。

oracle19c interval分区 数据类型

oracle19c interval分区 数据类型

oracle19c interval分区数据类型全文共四篇示例,供读者参考第一篇示例:Oracle 19c是目前Oracle公司推出的最新数据库版本,它引入了一些新的特性和改进,其中之一就是支持interval分区。

在本文中,我们将重点介绍Oracle 19c中interval分区的数据类型以及如何在数据库中使用。

让我们先来了解一下什么是interval分区。

在传统的分区方式中,需要手动为每个分区指定具体的范围值,然后将数据分区存储。

而在interval分区中,数据库会根据事先设置的间隔值自动生成新的分区。

当插入一条新数据时,数据库会根据该数据的日期或者时间信息自动将其放入相应的分区中。

这种方式极大地简化了分区管理的复杂性,同时也提高了数据库的性能和效率。

在Oracle 19c中,interval分区支持多种数据类型,包括日期、时间戳和数值型数据。

不同的数据类型在使用时会有一些细微差别,下面我们将分别介绍这几种数据类型的特点以及如何在数据库中应用。

首先是日期数据类型,Oracle 19c支持使用日期来进行interval 分区。

在创建表时,可以使用类似以下的语句定义一个日期类型的interval分区:CREATE TABLE sales(sale_date DATE)PARTITION BY RANGE (sale_date)INTERVAL (INTERVAL '1' MONTH)(PARTITION p1 VALUES LESS THAN(TO_DATE('2019-01-01', 'YYYY-MM-DD')));在上面的语句中,我们首先指定了分区键为sale_date,然后使用了INTERVAL关键字和一个月的间隔值,表示每个月会自动生成一个新的分区。

在定义具体分区时,需要指定第一个分区的边界值,此处为2019年1月1日。

Oracle 19c中的interval分区为数据库提供了更加智能、高效的分区方式。

oracle分区的interval字符

oracle分区的interval字符

oracle分区的interval字符在Oracle数据库中,分区是一种将表数据分成逻辑部分的方法,可以提高查询性能和管理数据的灵活性。

Oracle 11g引入了分区表的自动管理特性,其中一个重要的概念是分区的间隔(interval)字符。

分区的间隔字符是指在分区表中定义分区的方式,它决定了分区之间的边界。

使用间隔字符可以自动创建新的分区,并将新的数据插入到正确的分区中。

这样一来,用户不需要手动创建每个分区和插入数据,大大简化了分区表的管理。

在Oracle中,可以使用不同的间隔字符来定义分区。

其中一种常见的间隔字符是基于日期的间隔字符,比如按照月份进行分区。

这种情况下,可以使用以下语句来创建一个按照月份分区的表:CREATE TABLE sales (sales_id NUMBER,sales_date DATE,sales_amount NUMBER)PARTITION BY RANGE (sales_date)INTERVAL (INTERVAL '1' MONTH)(PARTITION sales_q1 VALUES LESS THAN (TO_DATE('01-APR-2022', 'DD-MON-YYYY')));在上述例子中,sales表按照sales_date列的日期范围进行分区。

INTERVAL '1' MONTH表示每个分区的间隔为一个月。

系统将自动创建新的分区,并将新的数据插入到正确的分区中。

另一个例子是使用数字的间隔字符。

假设需要根据订单金额将表进行分区,可以使用以下语句创建一个按照金额范围分区的表:CREATE TABLE orders (order_id NUMBER,order_date DATE,order_amount NUMBER)PARTITION BY RANGE (order_amount)INTERVAL (1000)(PARTITION orders_below_1000 VALUES LESS THAN (1000),PARTITION orders_1000_2000 VALUES LESS THAN (2000),PARTITION orders_2000_3000 VALUES LESS THAN (3000),PARTITION orders_above_3000 VALUES LESS THAN (MAXVALUE));在上述例子中,orders表按照order_amount列的值范围进行分区。

oracle segment分配规则

oracle segment分配规则Oracle段分配规则Oracle是一种关系型数据库管理系统,用于管理和存储大量的数据。

在Oracle中,数据存储在段(segment)中,每个段都有一个特定的分配规则。

本文将介绍Oracle段分配规则的一些重要方面。

1.段的概念段是Oracle中存储数据的基本单位。

它可以是表、索引、分区或独立的数据对象。

每个段都有一个唯一的段ID,用于在数据库中标识该段。

2.段的分配在Oracle中,段的分配是指将数据存储在磁盘上的过程。

当创建一个表或索引时,Oracle会自动为该表或索引分配一个段。

段的分配可以通过以下几种方式进行:- 自动分配:当创建表或索引时,Oracle会自动为其分配一个段。

自动分配可以根据数据库的空间管理策略来进行。

- 手动分配:可以通过手动指定分配的方式来为一个表或索引分配一个段。

手动分配可以根据具体的需求来进行,例如指定段的大小、存储位置等。

3.段的管理在Oracle中,段的管理是指对段进行监控、维护和优化的过程。

段的管理可以包括以下几个方面:- 监控:通过监控段的使用情况,可以了解段的存储情况、性能状况等。

可以使用Oracle提供的监控工具来监控段的使用情况。

- 维护:段的维护包括对段进行备份、恢复、重建等操作。

可以使用Oracle提供的维护工具来对段进行维护。

- 优化:通过优化段的使用方式和存储结构,可以提高段的性能和效率。

可以使用Oracle提供的优化工具来对段进行优化。

4.段的扩展和收缩在Oracle中,段的扩展和收缩是指对段的空间进行动态调整的过程。

段的扩展和收缩可以根据需要自动进行,也可以手动进行。

- 扩展:当段的空间不足时,Oracle可以自动扩展段的空间。

扩展可以根据数据库的空间管理策略来进行。

- 收缩:当段的空间过多时,Oracle可以自动收缩段的空间。

收缩可以根据具体的需求来进行,例如释放不再使用的空间等。

5.段的分区在Oracle中,段的分区是指将一个大的段划分为若干个小的分区,每个分区可以独立管理和维护。

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


并结合 工程 项 目中的具 体 实践应 用 , 分析 了分 区优化 技 术在性 能和 可 用性 方面发 挥 的重要 作用 , 对
海量数 据库 管理 、 能优 化提 供 一种 有效 的解 决方 案 。 性 关键 词 : 询优化 ;数据 库 分 区;本地 索引 ; 据 库 管理 查 数
中图分 类号 : 3 1 TP 1 文献 标识码 : A
d t b s nd is p ror a e op i ia i a a a ea t e f m nc tm z ton.
Ke y wor ds:qu r e f ma e o i z ton;d t b s r ii i e y p ror nc ptmia i a a a e pa tton ng;lc li e o a nd x;d t ba e ma a a s n—
第1 卷 第 4期 21 0 0年 8月

指 挥 信 息 系 统 与 技 术
Co mma d I f r to y tm & Teh oo y n n o ma in10 20
实践与应 用 ・
Orce数 据 库 分 区优 化 技 术 研 究 与应 用 al
1 分 区概 念 和 机 制
1 1 表 分 区 模 式 .
大 的数据 对 象 开始 出 现 , 如何 有 效 管理 和 应 用 这类 庞大 的数 据 对象 中海 量数 据 信 息 , 渐 成 为 数据 库 逐 应用领 域 比较突 出 的关 注点 。 al从 版本8 0开始 Orce . 引入 分 区技术 , 供 了一种 在 物 理上 将 大 数据 库 对 提 象 分解 为多个 小 的 、 管理实 体 的机制 。 区技术 使 易 分 得 那些 看 起来 令人 畏 缩 、 以实施 的海 量 数据 操 作 难

Oracle表分区的优缺点及有哪些分区类型

Oracle表分区的优缺点及有哪些分区类型分区表的作⽤:Oracle 的表分区功能可以使某些查询以及维护操作的性能⼤⼤提⾼分区表优缺点:(1)由于将数据分散到各个分区中,减少了数据损坏的可能性;(2)可以对单独的分区进⾏备份和恢复;(3)可以将分区映射到不同的物理磁盘上,来分散 IO;(4)提⾼可管理性、可⽤性和性能。

(5)缺点:已经存在的表没有⽅法可以直接转化为分区表。

不过 Oracle 提供了在线重定义表的功能。

(6)特殊性:含有 LONG、LONGRAW 数据类型的表不能进⾏分区,⼀般分区类型为:varchar,varchar2,number,date (7)每个表的分区或⼦分区数的总数不能超过 1023 个。

什么时候⽤分区表(设计原则):(1)单表过⼤,当表的⼤⼩超过 2GB,或对于 OLTP 系统,表的记录超过 1000 万,都应考虑对表进⾏分区。

(2)历史数据据需要剥离的,表中包含历史数据,新的数据被增加到新的分区中。

(3)查询特征⾮常明显,⽐如是按整年、整⽉或者按某个范围!(4)基于表的⼤部分查询应⽤,只访问表中少量的数据。

(5)按时间段删除成批的数据,例如按⽉删除历史数据。

(6)按时间周期进⾏表空间的备份时,将分区与表空间建⽴对应关系。

(7)如果⼀个表中⼤部分数据都是只读数据,通过对表进⾏分区,可将只读数据存储在只读表空间中,对于⼤数据库的备份是⾮常有益的。

(8)对于经常执⾏并⾏查询的表应考虑进⾏分区。

(9)当对表的部分数据可⽤性要求很⾼时,应考虑进⾏表分区。

分区表的类型:(1)范围分区(Range Partitioning) 8i+,以某⼀个范围进⾏分区。

eg:时间段划分。

(2)列表分区(List Partitioning) 9i+,以某⼀些⼏个值进⾏分区。

eg:地区分区,省份进⾏划分。

(3)哈希分区(Hash Partitioning),8i+,根据 hash 值进⾏的散列分区,可以有效的消除 io 的竞争。

oracle create table partition by 表达式

在Oracle数据库中,分区表是一种将表物理上分割成多个独立的部分的技术。

每个分区可以独立于其他分区进行存储、备份和索引,从而提高了查询性能、数据管理和维护的便利性。

创建分区表时,您可以使用表达式来确定分区键,这个表达式基于表中的一列或多列。

例如,您可能想要根据日期对数据进行分区,以便将旧数据移至归档或历史分区,同时保留当前数据在主分区中。

下面是一个示例,说明如何使用日期表达式来创建分区表:
在上述示例中,partitioned_table是一个根据data_date列进行分区的表。

该表有三个分区:p1、p2和p3。

p1包含所有在2022年之前的数据,p2包含所有在2022年和2023年之间的数据,而p3包含所有在2023年之后的数据。

请注意,上述示例中的日期格式字符串是'YYYY-MM-DD',您可能需要根据您的实际需求进行调整。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

<Insert Picture Here>Oracle技术交流----分区技术内容分区技术概述分区表和分区索引技术如何运用分区技术11g 分区新特性分区实施经验及案例分区实施服务性能海量数据库设计的关键技术---分区••Select和DML操作只访问指定分区•并行DML操作•Partition-wise Join•可管理性:数据删除,数据备份•2005历史数据清除•提高备份性能•指定分区的数据维护操作按年度进行分区2006•可用性•将故障局限在分区中•2007缩短恢复时间•分区目标优先级•高性能帐户交易明细表2008•数据维护能力•实施难度•高可用性(故障屏蔽能力)Oracle支持多种分区方法•分区方法•范围、hash、列表、复合分区删除添加分区分区帐户交易明细表05may05jan05feb05mar05apr05工行建行may05jan05feb05mar05apr05may05jan05feb05mar05apr05中行本地索引大表访问性能的提高分区对应用是透明的查询并统计工行上海分行5月份的可疑交易情况select* 自动忽略与访问无关的分区 实现分区间的并行查询select From 交易明细表Where branch=‘上海’and 日期between 01-May-2007and 31-May-2007显著提高访问大表时的性能帐户交易明细表(3600个分区)分区忽略机制系统自动根据分区情况优化数据BJ-05SH-05GZ-05访问,忽略无关的数据分区(只查询1/3600的数据)BJ-04SH-04GZ-04帐户交易明细表may05 jan05feb05mar05apr05may05 jan05feb05mar05apr05保单信息表may05jan05feb05mar05apr05内容分区技术概述分区表和分区索引技术如何运用分区技术11g 分区新特性分区实施经验及案例分区实施服务Oracle 分区技术的发展Basic maintenanceStatic partition Range partitioning Oracle8ManageabilityPerformanceCore functionalityMerge operation Partitionwise joins D i iHash and composite range hash partitioning Oracle8i operations: add, drop, exchange pruningGlobal range indexes Global index maintenanceList partitioning Oracle9i Dynamic pruning range-hash partitioning Local Index Global hash indexes Oracle10g Fast partition splitComposite range-list partitioningOracle9i R2Fast drop table Multidimensional pruning1M partitions per tableOracle10g R2maintenanceInterval Partitioning Partition AdvisorMore composite choices REF PartitioningVirtual Column PartitioningOracleDatabase 11g范围分区例CREATE TABLE sales (acct_noNUMBER(5),person VARCHAR2(30),sales_amount NUMBER(8),week_noNUMBER(2))PARTITION BY RANGE (week_no)(PARTITION P1 VALUES LESS THAN (4) TABLESPACE data0,123PARTITION P2 VALUES LESS THAN (8) TABLESPACE data1,...…PARTITION P13 VALUES LESS THAN (53)TABLESPACE data12 1);分区字段:week_no .23_VALUES LESS THAN 必须是确定值每个分区可以单独指定物理属性范围分区特点•最早、最经典的分区算法•Range分区通过对分区字段值的范围进行分区•Range分区特别适合于按时间周期进行数据的存储。

日、周、月、年等。

•数据管理能力强–数据迁移–数据备份–数据交换•范围分区的数据可能不均匀•范围分区与记录值相关,实施难度和可维护性相对较范围分区与记录值相关实施难度和可维护性相对较差Hash分区例create table CUSTOMERS (... column definitions ...) pctfree 0 nologgingg(p)storage ( initial 40m next 40m pctincrease 0 )partition by hash(customer_no) partitions 8 store in (cust_data01,cust_data02)create table CUSTOMERS (... column definitions ...) pctfree 0 nologgingstorage ( initial 40m next 40m pctincrease 0 )partition by hash(customer_no)(partition cust_p01 tablespace cust_data01,partition cust_p02 tablespace cust_data02,partition cust_p03 tablespace cust_data03,partition cust_p04 tablespace cust_data04p_p p_,partition cust p05 tablespace cust data05,partition cust_p06 tablespace cust_data06,partition cust_p07 tablespace cust_data07,partition cust p08tablespace cust data08),partition cust_p08 tablespace cust_data08)Hash分区特点•基于分区字段的HASH值,自动将记录插入到指定分区。

分区数般是•分区数一般是2的幂•易于实施•总体性能最佳•适合于静态数据•HASH分区适合于数据的均匀存储partition--wise joins和partition。

wise joins。

分区特别适合于PDML•HASHHASH分区特别适合于PDML和•支持(hash) local indexes•9i 不支持(hash) global indexes•10g 支持(hash) global indexes HASH分区•数据管理能力弱•HASH分区对数据值无法控制列表分区例create table addresses (... column definitions ...)create table addresses(column definitions)pctfree 0 nologgingstorage ( initial 40m next 40m pctincrease 0 )g ppartition by list(city_name)(partition addr_p01 values ('WELLINGTON') tablespace addr_data01dd d t01,partition addr_p02 values ('CHRISTCHURCH') tablespace addr_data02,partition addr_p03 values ('DUNEDIN','INVERCARGILL') tablespace addr_data03,partition addr_p04 values (AUCKLAND) tablespacepartition addr p04values('AUCKLAND')tablespaceaddr_data04,partition addr_p05 values ('HAMILTON','ROTORUA','TAURANGA') tablespace addr_data05)tablespace addr data05)列表分区特点•List分区通过对分区字段的离散值进行分区。

•List分区是不排序的,而且分区之间没有关联关系•List分区适合于对数据离散值进行控制。

Li t分区适合于对数据离散值进行控制•List分区只支持单个字段。

•List分区具有与范围分区相似的优缺点–数据管理能力强–List分区的数据可能不均匀–List分区与记录值相关,实施难度和可维护性相Li t分区与记录值相关实施难度和可维护性相对较差复合分区例create table daily_trans_data (...column definitions ...)partition by range(trans_datetime)partition by range(trans datetime)subpartition by hash(customer_no) subpartitions 8 store in (dtd_data01,dtd_data02) (partition dtd_20010620 values less than (to_date('21-jun-2001','dd-mon-yyyy')) (subpartition dtd20010620s01(subpartition dtd_20010620_s01,subpartition dtd_20010620_s02,subpartition dtd_20010620_s03 tablespace dtd_data03,subpartition dtd_20010620_s04 tablespace dtd_data04,subpartition dtd_20010620_s05 tablespace dtd_data05,subpartition dtd_20010620_s06 tablespace dtd_data06,subpartition dtd_20010620_s07 tablespace dtd_data07,subpartition dtd_20010620_s08 tablespace dtd_data08),partition dtd_20010621 values less than (to_date('22-jun-2001','dd-mon-yyyy')) ,partition dtd_20010622 values less than (to_date('23-jun-2001','dd-mon-yyyy')) subpartitions 4)复合分区特点•Oracle支持的Composite分区:•Range-Hash,Range-ListRange-Hash Range-List•既适合于历史数据,又适合于数据均匀分布•与范围分区一样提供高可用性和管理性partition wise joins •更好的PDML和partition-wise joins性能•实现粒度更细的操作•支持复合local indexes•不支持复合compositeglobal indexesl b l i d分区索引不分区分区表索引不分区√√分区√√GlobalNonpartitioned indexGlobal Partitioned IndexGlobal Partitioned Index 杭州嘉兴湖州03年04年…08年03年04年08年03年04年…08年杭州–丽水杭州–丽水杭州–丽水Local non-Prefixed Partitioned IndexTXN_CURRENTTXN CURRENT03年04年…08年exchangestageexchange03年02年…01年TXN_HISTORY•分区表索引的分类:–Local Prefixed indexL l N n pr fi d ind–Local Non-prefiexed index–Global Prefixed index–Non Partition Indexy Global索引的分区不同与表分区y Local索引的分区与表分区相同y An index is prefixed if it is partitioned on a left prefix of the index columns.l ft fi f th i d ly分区表上的非分区索引等同于Global索引•Global索引必须是范围分区---9i之前•Global索引可以是HASH分区--10g新特性•Global索引不支持Bitmap索引Unique索引必须是prefixed 或者包含分•Unique索引必须是prefixed,或者包含分区字段索引)•Local索引(non-prefixed, non-unique)可以不包含分区字段分区索引举例create index cust_idx1 on customers(customer_name)global partition by range (customer_name)(p_p()p_(partition cust p01 values less than (‘H’) tablespace cust index01,partition cust_p02 values less than (‘N’) tablespace cust_index02,partition cust_p03 values less than (‘T’) tablespace cust_index03partition cust p04values less than(MAXVALUE)tablespace cust index04) ,partition cust_p04 values less than (MAXVALUE) tablespace cust_index04) create index cust_idx2 on customers(customer_no) local(partition cust_idx_p01 tablespace cust_index01,partition cust_idx_p02 tablespace cust_index02,partition cust_idx_p03 tablespace cust_index03,partition cust_idx_p04 tablespace cust_index04,partition cust_idx_p05 tablespace cust_index05,partition cust_idx_p06 tablespace cust_index06,partition cust_idx_p07 tablespace cust_index07,partition cust idx p07tablespace cust index07,partition cust_idx_p08 tablespace cust_index08)create index cust_idx3 on customers(customer_type) local;4-23分区表索引的使用•OLTP系统中的建议–Global和unique local index性能优于nonunique local indexnonunique local index–Local index提供了更好的可用性•数据仓库系统中的建议–Local index更适合于数据装载和分区维护–在大量数据统计时,能充分利用Localindex并行查询能力•在性能、高可用性和可管理性之间进行平衡分区索引选择策略表分区字段是索引字段的前缀?该非分区字段是唯一索引?Local Prefixed Y esNo该非分区字段是唯索引Global Prefixed Y esNo是否性能在可承受范围,而分区的可管理性、可用性更重要?Local Non prefixed Y esLocal Non-prefixed是数据仓库/交易系统?NoOL TP DSS Local Non-prefixed Global Prefixed内容分区技术概述分区表和分区索引技术如何运用分区技术11g 分区新特性分区实施经验及案例分区实施服务99J Partition pruning: Only the relevant partitions are accessed.99-Feb 99-Janp 99Feb99-MarSQL> SELECT SUM(sales_amount)2FROM sales 99-Apr2 FROM sales3 WHERE sales_date BETWEEN4 TO DATE(‘01-MAR-1999’,99-May_5 ‘DD-MON-YYYY’) AND 6 TO_DATE(‘31-MAY-1999’,99-Jun 7 ‘DD-MON-YYYY’);sales1 select * from daily_trans_summ2* where trans_datetime between to_date('25-jun-2001 08','DD-mon-yyyy hh24') and to_date('28-jun2001 18,DD mon yyyy hh24)jun-200118','DD-mon-yyyy hh24')Partition Partition Operation Options Object Name Start Stop -----------------------------------------------------------------------------SELECT STATEMENT PARTITION RANGE ITERATOR 231 234 TABLE ACCESS FULL DAILY_TRANS_SUMM 231 2341 select * from daily_trans_summ2* where trans_datetime in ('25-jun-2001','28-jun-2001')Partition Partition Operation Options Object Name Start Stop -----------------------------------------------------------------------------SELECT STATEMENT PARTITION RANGE INLIST KEY(INLIST) KEY(INLIST) TABLE ACCESS FULL DAILY_TRANS_SUMM KEY(INLIST) KEY(INLIST)TABLE ACCESS FULL DAILY TRANS SUMM KEY(INLIST)KEY(INLIST)Partition-Wise Join312Full partition-wise join Nonpartition-wise joinP ti l titi i j iPartial partition-wise joinQ yQuery slave Partition Partitioned tablePartition-wise Joins举例1 select /*+ full(c) */ c.customer_no, count(*)2 from customers c, daily_trans_data d3 where c.customer_no = d.customer_no4 and d.trans_datetime between to_date('25-jun-2001','dd-mon-yyyy')5 and to_date('28-jun-2001','dd-mon-yyyy')6* group by c.customer_no6*bPartition PartitionPartition PartitionOperation Options Object Name Start Stop -----------------------------------------------------------------------------SELECT STATEMENT PARTITION HASH ALL 1 8 SORT GROUP BY HASH JOIN PARTITION RANGE ITERATOR 50 53 PARTITION RANGE ITERATOR5053TABLE ACCESS FULL DAILY_TRANS_DATA 393 424 TABLE ACCESS FULL CUSTOMERS 1 8分区表的管理功能• 分区的增加(ADD) • 分区的删除(DROP) • 分区的合并(MERGE) • 分区的清空(TRUNCATE) • 分区的交换(EXCHANGE) • 分区的压缩(COALESE) • 分区的移动(MOVE) • 分区的分离(SPLIT) • 修改分区的Default Attribute • 分区的更名(RENAME)分区索引的管理功能• • • • • • • 分区索引的删除(DROP) 分区索引的修改(MODIFY) 分区索引Default D f lt Att Attribute ib t 的修改 分区索引的重建(REBUILD) 分区索引的更名(RENAME) 分区索引的分离(SPLIT) 分区索引的 索 的Unusable“滚动窗口”操作 - 大量数据高速装载NOV 2002 NOV 2002 NOV 2002 NOV 2002 NOV 2002 NOV 2002 NOV 2002 NOV 2002分区表和Local索引 新月份数据的加载和索引的维护OCT 2002SEP 2002AUG 2002...NOV 2001OCT 2001“滚动窗口”操作 - 大量数据高速装载分区表和Local索引 新月份数据的加载和索引的维护 删除或归档最老月份的数据OCT SEP OCT OCT OCT OCT OCT SEP OCT SEP SEP SEP SEP SEP DEC NOV OCT NOV DEC DEC DEC DEC NOV DEC NOV NOV NOV NOV OCT NOV OCT OCT OCT OCT OCT NOV NOV NOV NOV NOV NOV NOV OCT 2002 2002 2002 2002 2002 2002 2002 2002 2002 2002 2002 2002 2002 2001 2001 2001 2001 2001 2001 2001 2001 2001 2001 2001 2001 2001 2001 2001 2001 2001 2001 2001 2001 2001 2002 2002 2002 2002 2002 2002 2002 2001...分区交换功能• 通过交换数据段 通过交换数据段,实现分区和非分区表的数据交换。

相关文档
最新文档