`
灵雨飘零
  • 浏览: 34915 次
  • 性别: Icon_minigender_1
  • 来自: 唐山
文章分类
社区版块
存档分类
最新评论

谈一下如何设计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分区
如果数据不容易用范围分区,但你想提升性能和表的易管理性。 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数据库表的设计技巧.pdf

    在设计Oracle数据库表时,还需要考虑索引的使用,合理创建索引可以加速查询,但过多的索引会增加写操作的负担。另外,考虑表的分区策略,对于大数据表,分区可以显著提升查询性能。同时,避免冗余数据,保持数据的...

    试谈优化Oracle库表设计的若干方法.docx

    在数据库设计中,Oracle 库表的优化是提升系统性能的关键环节。许多性能问题源于设计不合理,而非硬件或DBA的配置调整。本文主要探讨如何优化Oracle数据库的表设计,尤其是索引策略,并通过PowerDesigner 10这一流行...

    浅谈超大型Oracle数据库的基础设计和优化设计.pdf

    因此,本文重点讨论了超大型Oracle数据库的基础设计和优化设计,旨在帮助用户更好地理解和应用Oracle数据库。 首先,我们来分析Oracle的逻辑结构和程序结构。Oracle的逻辑结构主要由存储单元和数据库对象组成。存储...

    浅谈ORACLE数据库优化设计.pdf

    5. **其他优化策略**:还包括使用绑定变量、选择合适的索引类型(如B树、位图索引)、优化查询语句、合理设置数据库参数、使用分区表和分区索引来加速大表查询、监控和调整统计信息等。 6. **参考文献与专业指导**...

    oracle相关oracle相关oracle相关oracle相关oracle相关

    最后,"超大型ORACLE数据库应用系统的设计--Oracle专区--IT胖子2.htm"和"超大型ORACLE数据库应用系统的设计--Oracle专区--IT胖子1.htm"可能探讨了在处理大规模数据时,如何优化架构、负载均衡、分区策略等,这对于...

    浅谈Oracle数据库性能调优.pdf

    除此之外,还有其他优化策略,例如,通过分析SQL语句的执行计划来优化查询效率,合理规划表空间和索引,使用绑定变量以减少解析次数,以及定期进行数据库维护,如统计信息收集、表分区、索引重建等,来提升数据库的...

    浅谈ORACLE数据库的优化 (2).pdf

    例如,表的分区、索引的选择和维护、适当的数据类型使用,以及合理的数据分布策略,都能对性能产生积极影响。 在DBA的工作中,调整内存结构如Database Buffer、Share Pool、Redo Log Buffer等也是关键。根据系统的...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

     ROBYN SANDS 思科公司的软件工程师,为思科的客户设计开发嵌入式Oracle数据库产品。从1996年开始使用Oracle,在应用开发、大型系统实现以及性能评估方面具有丰富的经验。她是OakTable的成员,同时是Expert ...

    赢在起点-数据库设计规范 梁敬彬大牛的经验之谈

    10. Oracle特定知识点:Oracle支持物化视图、分区表、闪回技术等,提高数据管理和恢复能力。其PL/SQL语言提供强大的过程编程能力。 11. MySql特性:MySql以其轻量级、高性能而受欢迎,支持InnoDB存储引擎实现事务...

    浅谈Oracle数据库的建模与设计

    在构建基于Oracle数据库的应用系统时,数据库的建模与设计是至关重要的。这不仅关乎系统的稳定性和性能,还直接影响到开发过程的效率和后期维护的成本。本文将围绕Oracle数据库的建模与设计展开讨论,主要包括逻辑...

    数据库设计经验谈.doc

    5. **分区与分片**:对于大数据量的表,可以采用分区或分片技术来提高查询速度和管理效率。 总的来说,良好的数据库设计需要综合考虑业务需求、性能优化和数据完整性,同时不断学习和适应新技术和最佳实践。只有...

    浅谈数据库优化方案

    通过将大表在物理上划分为多个分区,每个分区可以分布在不同的磁盘上,这样查询时仅需扫描相关的分区,而非整个表,极大地减少了I/O操作。此外,分区还能平衡磁盘I/O,避免单个磁盘过载。例如,对于实时表,可以根据...

    收获不止SQL优化

    7.3.1 分区表相关案例 185 7.3.2 全局临时表案例 190 7.3.3 监控异常的表设计 195 7.3.4 表设计优化相关案例总结 199 7.4 本章习题、总结与延伸 199 第8章 且慢,学习索引如何让SQL飞 200 8.1 索引知识要点...

    数据库新技术与新应用--mongodb.docx

    在大数据时代,传统的关系型数据库(如 MySQL、Oracle)在处理海量、高并发的数据时,往往面临性能瓶颈。为了解决这一问题,NoSQL(Not Only SQL)数据库应运而生。NoSQL 不是单一的技术,而是涵盖了多种不同类型的...

Global site tag (gtag.js) - Google Analytics