谈一下怎样设计Oracle 分区表
在谈设计Oracle分区表之间先区分一下分区表和表空间的个概念:
表空间:表空间是一个或多个数据文件的集合,全部数据对象都存放在指定的表空间中,但主要存放表,故称表空间。
分区表:分区致力于解决支持极大表和索引的关键问题。它採用他们分解成较小和易于管理的称为分区的片(piece)的方法。一旦分区被定义,SQL语句就能够訪问的操作某一个分区而不是整个表,因而提高管理的效率。分区对于数据仓库应用程序很有效,由于他们经常存储和分析巨量的历史数据。当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区。表进行分区后,逻辑上表仍然是一张完整的表,仅仅是将表中的数据在物理上存放到多个表空间(物理文件上),这样查询数据时,不至于每次都扫描整张表。
表分区的详细作用:
Oracle的分区表功能通过改善可管理性、性能和可用性,从而为各式应用程序带来了极大的优点。
通常,分区能够使某些查询以及维护操作的性能大大提高。此外,分区还能够极大简化常见的管理任务,分区是构建千兆字节数据系统或超高可用性系统的关键工具。
分区功能可以将表、索引或索引组织表进一步细分为段,这些数据库对象的段叫做分区。每一个分区有自己的名称,还可以选择自己的存储特性。从数据库管理员的角度来看,一个分区后的对象具有多个段,这些段既可进行集体管理,也可单独管理,这就使数据库管理员在管理分区后的对象时有相当大的灵活性。可是,从应用程序的角度来看,分区后的表与非分区表全然同样,使用 SQL DML 命令訪问分区后的表时,无需不论什么改动。
在什么时候使用分区表呢?
1、表的大小超过2GB。
2、表中包括历史数据,新的数据被添加都新的分区中。
表分区的优缺点:
长处:
1、改善查询性能:对分区对象的查询能够仅搜索自己关心的分区,提高检索速度。
2、增强可用性:假设表的某个分区出现问题,表在其它分区的数据仍然可用;
3、维护方便:假设表的某个分区出现问题,须要修复数据,仅仅修复该分区就可以;
4、均衡I/O:能够把不同的分区映射到磁盘以平衡I/O,改善整个系统性能。
缺点:
1、分区表相关:已经存在的表没有方法能够直接转化为分区表。只是 Oracle 提供了在线重定义表的功能。
2、分区致力于解决支持极大表和索引的关键问题。它採用他们分解成较小和易于管理的称为分区的片(piece)的方法。
分区表的分类
1、Range partitioning(范围分区)
2、Hash partitioning(哈希分区)
3、List partitioning(列表分区)
4、Composite range-hash partitioning(范围-哈希组合分区)
5、 Composite range-list partitioning(范围-列表组合分区)
何时选择范围分区
必须可以将表的记录依照某一列值的范围进行划分。你想处理一些数据,这些数据常常是属于某一个范围内,比如月份。假设数据可以依照分区的范围均匀分布的话,那会获得最佳性能。假设数据分布非常不均匀的话,你可能不得不选择其它分区方式。

CREATE TABLE sales
( invoice_no NUMBER,
sale_year INT NOT NULL,
sale_month INT NOT NULL,
sale_day INT NOT NULL )
PARTITION BY RANGE (sale_year, sale_month, sale_day)
( PARTITION sales_q1 VALUES LESS THAN (1999, 04, 01)
TABLESPACE tsa,
PARTITION sales_q2 VALUES LESS THAN (1999, 07, 01)
TABLESPACE tsb,
PARTITION sales_q3 VALUES LESS THAN (1999, 10, 01)
TABLESPACE tsc,
PARTITION sales_q4 VALUES LESS THAN (2000, 01, 01)
TABLESPACE tsd );

何时选择HASH分区
假设数据不easy用范围分区,但你想提升性能和表的易管理性。 Hash分区提供了一个在指定数量的分区内交叉均匀分布数据的方法。行依据分区键的hash值映射到对应分区中。创建和使用hash分区你能够灵活放置数据,能够通过交叉訪问在不同I/O设备上的分区提升性能。
CREATE TABLE scubagear (id NUMBER, name VARCHAR2 (60))
PARTITION BY HASH (id)
PARTITIONS 4 STORE IN (gear1, gear2, gear3, gear4);
何时选择列表分区
使用LIST分区你能够直接控制某些数据映射到某些分区。你能够为某个分区指定不连续的分区键值。这不同于RANGE分区(用键值的范围划分分区),也不同于HASH分区(不能控制某行映射到哪个分区)。

CREATE TABLE q1_sales_by_region
(deptno number, deptname varchar2(20), quarterly_sales number(10, 2), state varchar2(2))
PARTITION BY LIST (state)
(PARTITION q1_northwest VALUES ('OR', 'WA'),
PARTITION q1_southwest VALUES ('AZ', 'UT', 'NM'),
PARTITION q1_northeast VALUES ('NY', 'VM', 'NJ'),
PARTITION q1_southeast VALUES ('FL', 'GA'),
PARTITION q1_northcentral VALUES ('SD', 'WI'),
PARTITION q1_southcentral VALUES ('OK', 'TX'));

分区表的设计
怎样选择分区的类型,怎样选择分区的列呢?在这之前你必须明白你的目的——易管理性和性能,你更注重哪个方面?分区表所影响的方面能够归类为下面几种:性能、易管理性、数据清理。
以下分别说说分区表对每一项的详细影响,
性能:
这通常是分区的主要目的。分区将大表变成了小表,当where之后的条件体现分区字段的详细值时,避免了全表扫描。
易于管理:
对于包括海量数据的大表,分区带来的易于管理性是很明显的。当你建议一个基于非分区表的索引时,唯一的选择就是创建整个索引。假设表被分区,你就能够依据分区并行为此表创建索引,比如:
alter index par_ind_01 reuild partition yy05;
除此之外你还能够同一时候的做非常多事情,像改变表所在表空间、导出表,删除表数据等等。
删除数据:
我们常常会须要删除表的一些历史数据,一般做法是delete,可是这会导致undo和redo的信息高速增长,并且影响数据库总体性能。这时我们就能够利用drop某个分区来完毕此任务,比如:
alter table tab_a drop partition yy01;
当一个表的分区被删除,相应的local索引也同一时候被删除。假设还存在着global索引,那么它会变成unusable状态。为了避免此事情的发生,你能够使用:
alter table tab_a drop partition yy01 update global indexes;
谈一下怎样设计Oracle 分区表的更多相关文章
- 谈一下如何设计Oracle 分区表
在谈设计Oracle分区表之间先区分一下分区表和表空间的个概念: 表空间:表空间是一个或多个数据文件的集合,所有数据对象都存放在指定的表空间中,但主要存放表,故称表空间. 分区表:分区致力于解决支持极 ...
- 深入学习Oracle分区表及分区索引
关于分区表和分区索引(About Partitioned Tables and Indexes)对于10gR2而言,基本上可以分成几类: • Range(范围)分区 • Has ...
- 【三思笔记】 全面学习Oracle分区表及分区索引
[三思笔记]全面学习Oracle分区表及分区索引 2008-04-15 关于分区表和分区索引(About PartitionedTables and Indexes) 对于 10gR2 而言,基本上可 ...
- 性能-发挥ORACLE分区表
ORACLE分区表发挥性能 http://www.cnblogs.com/zwl715/p/3962837.html 1.1 分区表PARTITION table 在ORACLE里如果遇到特别大的表, ...
- oracle 分区表和分区索引
很复杂的样子,自己都没有看完,以备后用 http://hi.baidu.com/jsshm/item/cbfed8491d3863ee1e19bc3e ORACLE分区表.分区索引ORACLE对于分区 ...
- 浅谈PHP代码设计结构
浅谈PHP代码设计结构 您的评价: 还行 收藏该经验 coding多年,各种代码日夜相伴,如何跟代码友好的相处,不光成为职业生涯的一种回应,也是编写者功力的直接显露. 如何看 ...
- 从底层谈WebGIS 原理设计与实现(三):WebGIS前端地图显示之根据地理范围换算出瓦片行列号的原理(转载)
从底层谈WebGIS 原理设计与实现(三):WebGIS前端地图显示之根据地理范围换算出瓦片行列号的原理 1.前言 在上一节中我们知道了屏幕上一像素等于实际中多少单位长度(米或经纬度)的换算方法, ...
- ORACLE分区表、分区索引详解
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt160 ORACLE分区表.分区索引ORACLE对于分区表方式其实就是将表分段 ...
- Python 基于python+mysql浅谈redis缓存设计与数据库关联数据处理
基于python+mysql浅谈redis缓存设计与数据库关联数据处理 by:授客 QQ:1033553122 测试环境 redis-3.0.7 CentOS 6.5-x86_64 python 3 ...
随机推荐
- mysql 时间戳与日期格式的相互转换
1.UNIX时间戳转换为日期用函数: FROM_UNIXTIME() ); 输出:2006-08-22 12:11:10 2.日期转换为UNIX时间戳用函数: UNIX_TIMESTAMP() Sel ...
- C# 数据结构 基础 论述
问题: 信息世界中,计算机是加工处理的信息的载体,在这个过程中面临着三个问题: 1.如何方便高效的组织数据 2.如何在计算机中存储数据(内存和外存) 3.如何对存储的数据进行高效的操作 目的: 我们都 ...
- JSON字符串序列化与反序列化浅试
一.添加引用(using Newtonsoft.Json.Linq;) 二. 1.生成json字符串源码 List<string> list = new List<string> ...
- DELPHI TMS Advanced Charts 3.8.0.3 Full Source D6-XE6 控件分享
仅供大家学习使用,请大家支持正版!! TMS Advanced Charts 3.8.0.3 Full Source D6-XE6 该控件用来画图标,压缩包里还有FOR INTRAWEB的版本 链接: ...
- www.nygwkt.com
南京宁阳制冷设备维修有限公司是专业从事厨房空调,http://www.nygwkt.com岗位空调制冷设备设计.制造.安装.改造.维修.保养的专业化公司.在南京享有很高的客户评论. 我们对南京宁阳制冷 ...
- c++和java(c#)之间的pk
个人认为本文较偏激,且年代较久远,但可以一看. 转自c++和java(c#)之间的pk 1.谁好谁坏? 如同当初我没有想到会进入java阵营一样,这次闯入c++阵营也是意料之外的.多年前,受到微软的影 ...
- 一步一步理解 Java 企业级应用的可扩展性
摘要:本文主要介绍如何理解 Java 应用的扩展方式以及不同类型的扩展技术和具体技巧,介绍一些有关 Java 企业级应用的一般扩展策略. 老实说,"可扩展性"是个全面且详尽的话题, ...
- 【POJ2699】The Maximum Number of Strong Kings(网络流)
Description A tournament can be represented by a complete graph in which each vertex denotes a playe ...
- Sqoop安装与使用(sqoop-1.4.5 on hadoop 1.0.4)
1.什么是Sqoop Sqoop即 SQL to Hadoop ,是一款方便的在传统型数据库与Hadoop之间进行数据迁移的工具,充分利用MapReduce并行特点以批处理的方式加快数据传输,发展至今 ...
- Haskell高阶函数
Haskell functions can take functions as parameters and return functions as return values. A function ...