- 浏览: 513782 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
u011165335:
distinct不影响使用半连接
(转)关于semi-join/anti-join的一点探讨 -
353790060:
redo 记录事务执行后的日志 undo 记录事务回滚的日志 ...
Oracle redo与undo浅析 -
jayxigua:
redo用于在失败时重放事务(即恢复事务),undo则用于取消 ...
Oracle redo与undo浅析 -
aa_qq110:
Openbravo有中文包吗
Openbravo开发手册 -
iocaop:
不错,写的很清晰易懂
JAVA 服务提供者框架介绍
一. 概念
一个表被分成了很多个独立的分区,那么每一个分区应该存储哪些数据,这就是表分区机制要解决的问题。
二. 表分区机制概述
目前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功能或对一个区间分区使用并行索引扫描,则建议在区间分区中再使用散列或列表分区。
发表评论
-
Oracle事务原理探究2--读书笔记五
2015-01-05 13:46 1668续上篇... 3. 数据块访问与undo ... -
Oracle事务原理探究1--oracle核心技术读书笔记五
2014-12-29 21:18 20061. 冲突解决 假如有一个系统只有你和我两个 ... -
oracle undo 复杂度--oracle核心技术读书笔记四
2014-10-01 14:23 1263一. 概述 undo ... -
Oracle redo 复杂度--oracle核心技术读书笔记三
2014-09-29 22:13 1165一. 概述 我 ... -
(转)undo系列学习之Oracle IMU及Redo Private Strands技术
2014-09-27 23:09 1145原博客地址: http://blo ... -
oracle如何保证事务的ACID原则--oracle核心技术读书笔记二
2014-09-21 11:18 1762在事务中有四个通用的原则是所有数据库都必须遵守的,简称ACI ... -
Oracle基本数据改变原理浅析(redo与undo)--oracle核心技术读书笔记一
2014-09-14 17:00 4790在oracle中我们做一些更新操作,oracle底层是怎么流 ... -
(转)Oracle中Hint深入理解
2014-01-07 19:48 1177原文出处:http://czmmiao.iteye.com/ ... -
Oracle全表扫描成本示例
2013-12-29 22:51 0一. 准备工作 1. block size 8KB( ... -
(转)Oracle查看trace文件步骤
2013-12-10 09:54 5383原文地址: http://www.2cto.com/data ... -
【转】CBO hint:no_unnest,push_subq,push_pred的用法
2013-12-02 20:11 1211原博客地址:http://blog.itpub.net/15 ... -
index_stats视图各列的含义
2013-12-02 19:10 1385index_stats视图来收集B树 ... -
(转)Oracle 调整SGA、PGA大小
2013-10-31 13:25 31177SQL> show parameter sga; ... -
(转)Oracle cursor_sharing 参数 详解
2013-08-25 23:04 1942原博客地址:http://blog.csdn.net/tia ... -
(转)shared pool 原理
2013-08-18 22:58 1472原博客地址:http://blog.csdn.net/ro ... -
(转)Oracle 游标(cursor)说明
2013-08-15 20:17 1470原博客地址:http://blog.csdn.net/ti ... -
(转)关于semi-join/anti-join的一点探讨
2013-08-14 21:20 10940原博客地址:http://space.itpub.net ... -
oracle 索引访问方式
2013-07-29 23:02 1441一. 概述 index uni ... -
(转)Oracle动态性能视图学习笔记(2)_v$sesstat_v$mystat_v$statname
2013-07-29 21:41 1192原博客地址:http://space.itpub.net/1 ... -
(转)Oracle性能优化 之 共享池
2013-07-29 21:04 1235转载作品,原始出去如下: http://blog.ch ...
相关推荐
Oracle表分区总结 Oracle中提供了对表进行分区的机制,通过表分区,可以将表空间中数据按照某种方式分别存放到特定的分区中。
"Oracle分区表和分区索引在VLDB中的研究" 本文研究了Oracle分区表和分区索引在VLDB(Very Large Databases)中的应用。分区表和分区索引是数据库管理中的关键技术之一,是VLDB中一个重要的性能提升机制。通过分析一...
局部索引一定是分区索引,分区键等同于表的分区键,分区数等同于表的分区数,一句话,局部索引的分区机制和表的分区机制一样。2.如果局部索引的索引列以分区键开头,则称为前缀局部索引。3.如果局部索引的列不是以...
Oracle分区表是 Oracle 数据库中的一种存储机制,用于将大型表拆分为多个小型表,提高查询性能和数据维护效率。分区表的出现是为了解决大型表带来的性能瓶颈问题。 分区表的优点包括: * 提高查询性能:分区表可以...
分区机制是指将大型数据库对象分解为多个小的、易于管理的实体,以提高数据库性能和可用性。该机制可以将大型数据库对象分解为多个小的、独立的实体,每个实体可以独立地进行维护和优化,从而提高数据库性能和可用性...
本课程详细介绍了Oracle数据库的分区表机制、分区表应用场景、分区表与分区索引类型/创建/维护操作、分区裁剪等,结合大量的案例程序,对Oracle分区表的使用进行了详细的分析讲解。
Oracle分区功能提高应用程序性能 79 Oracle数据库处理时间基本准则 81 入侵Oracle数据库常用操作命令 82 Oracle数据库优化及其应用程序研究 83 Instance实例和数据库 85 Oracle数据缓冲区内部机制 85 Oracle 9i...
1z0-033-11(B) 发布不同oracle文件的原因 诊断表空间 表空间分区原因 检查点工作 检查点优化 调整重做日志 13 1z0-033-13 关于自动段空间管理 ext 与oracle 空间使用 percent oracle块参数 行迁移问题 什么时间进行...
Oracle数据库分区表是指将大型表分割成多个小表,用于提高数据的管理和查询效率。分区表可以根据不同的列和条件来分区。 以上是Oracle数据库题库.pdf中涵盖的重要知识点。 Oracle数据库管理员需要具备这些知识点,...
如果数据中有空值,Oracle 机制会自动将其规划到 maxvalue 的分区中。 散列分区(哈希分区)是根据字段的 hash 值进行均匀分布,尽可能地实现各分区所散列的数据相等。 Oracle 采用哈希码技术分区,具体分区如何由 ...
1. 分区表(Partitioning):ORACLE 11G 引入了分区表的概念,可以将大表分割成多个小表,提高查询性能。 2. 数据压缩(Data Compression):ORACLE 11G 支持数据压缩,可以减少存储空间和提高查询性能。 3. 高级...
Oracle 执行计划是 Oracle 数据库中的一种机制,用于优化 SQL 语句的执行过程。它决定了如何访问存储器,得到需要的结果集。执行计划的主要内容包括访问方式和访问顺序。 Oracle 执行计划的生成方式有三种:Explain...
§10.9 是否采用簇和分区 116 §10.10 表和索引的空间预分配 116 §10.11 确定数据库对象存储大小 117 §10.11.1 非簇表的大小计算 117 §10.11.2 索引大小计算 119 §10.11.3 簇表的大小计算 120 §10.11.4 位图...
数据库性能优化是为了提高数据库的运行效率,可以通过索引、分区、缓存等方法来实现 3. 数据库安全 数据库安全是为了保护数据库免受非法访问和修改,可以通过用户身份验证、权限控制、加密等方法来实现 4. 数据库...
不完全恢复可以恢复部分数据,例如某个表或某个分区。 归档与非归档 Oracle RMAN支持两种类型的备份:归档备份和非归档备份。归档备份是指备份数据库的归档redo日志文件,而非归档备份是指备份数据库的数据文件。 ...
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章 并行...
锁,表分区 ①:锁的概念 ②:并发问题 ③:锁机制 ④:锁的类型 ②:常见分区 六.数据库对象管理 ①:同义词 ②:序列 ③:视图 ④:索引 七.PL/SQL基础 ①:什么是PL/SQL ②:集合 ③:动态SQL ④:条件语句 ⑤:...
4. 可扩展性:ORACLE 数据库支持可扩展性,包括水平分区、垂直分区和数据仓库等。 四、结论 ORACLE 数据库是一种关系型数据库管理系统,具有高性能、高可用性和高安全性。了解 ORACLE 数据库的体系结构和安全性...