在谈设计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; 

最新文章

  1. [ios]利用alertView 插入数据都数据库。笔记
  2. AJAX跨域访问(从Tomcat8到Apache/Nginx)
  3. 使用PM控制台 查找和安装一个 NuGet Package
  4. Tor
  5. 14.1.1 InnoDB as the Default MySQL Storage Engine
  6. MVC中实现多按钮提交(转)
  7. 十、oracle 常用函数
  8. C语言中static作用
  9. sql server作业实现数据同步
  10. Python中从B类中调用A类的方法。
  11. Android Studio安装Genymotion插件
  12. 在线修改redo日志大小
  13. UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-5: ordinal not in range(128)
  14. HDU 3586.Information Disturbing 树形dp 叶子和根不联通的最小代价
  15. Spring Mvc和Spring Boot配置Tomcat支持Https
  16. E - Reachability from the Capital
  17. strace跟踪多进程与内核的交互
  18. AbstractBootstrap.bind()
  19. Java多态面试题案例几解题思路
  20. linux文件系统问题:wrong fs type, bad option, bad superblock

热门文章

  1. demo_05HTML5+CSS3绘制小鸟
  2. Activity singleInstance启动模式
  3. alter system register
  4. 从string.size()和string.length()聊到长度的问题和一个关于数据结构定义的技巧
  5. Word 2016 test
  6. 学习Swift -- 拓展
  7. phonegap 4.2 环境搭建 及 项目创建 运行
  8. golang中设置Host Header的小Tips
  9. Rails中的测试RSpec升级遇到的问题
  10. 创新高性能移动 UI 框架-Canvas UI 框架