当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区。表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间(物理文件上),这样查询数据时,不至于每次都扫描整张表。
表分区的优点
改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度
增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用
维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可
均衡I/O:可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能
缺点:
分区表相关:已经存在的表没有方法可以直接转化为分区表。不过Oracle提供了在线重定义表的功能
使用时机
表的大小超过2GB
表中包含历史数据,新的数据被增加都新的分区中
表分区的类型
范围分区
CREATE TABLE ORDERS ( ORDER_ID NUMBER(7) NOT NULL, ORDER_DATE DATE, TOTAL_AMOUNT NUMBER, CUSTOTMER_ID NUMBER(7), PAID CHAR(1) ) PARTITION BY RANGE (ORDER_DATE) ( PARTITION PART01 VALUES LESS THAN (TO_DATE('01-MAY-2003','DD-MON-YYYY')) TABLESPACE ORD_TS01, PARTITION PART02 VALUES LESS THAN (TO_DATE('01-JUN-2003','DD-MON-YYYY')) TABLESPACE ORD_TS02, PARTITION PART02 VALUES LESS THAN (TO_DATE('01-JUL-2003','DD-MON-YYYY')) TABLESPACE ORD_TS03 ); #MAXVALUE的使用 PARTITION BY RANGE (grade) ( PARTITION part1 VALUES LESS THEN (1000) TABLESPACE Part1_tb, PARTITION part2 VALUES LESS THEN (MAXVALUE) TABLESPACE Part2_tb );
列表分区
PARTITION BY LIST (area) ( PARTITION part1 VALUES ('guangdong','beijing') TABLESPACE Part1_tb, PARTITION part2 VALUES ('shanghai','nanjing') TABLESPACE Part2_tb );
散列分区
根据hash算法来计算具体某条纪录应该插入到哪个分区中。建议分区的数量采用2的n次方,这样可以使得各个分区间数据分布更加均匀。
PARTITION BY HASH (COL) ( PARTITION PART01 TABLESPACE HASH_TS01, PARTITION PART02 TABLESPACE HASH_TS02, PARTITION PART03 TABLESPACE HASH_TS03 ); PARTITION BY HASH (empno) PARTITIONS 8 STORE IN (emp1,emp2,emp3,emp4,emp5,emp6,emp7,emp8);
组合范围散列分区
这种分区是基于范围分区和列表分区,表首先按某列进行范围分区,然后再按某列进行列表分区,分区之中的分区被称为子分区。
PARTITION BY RANGE(SALES_DATE) SUBPARTITION BY LIST (STATUS) ( PARTITION P1 VALUES LESS THAN(TO_DATE('2003-01-01','YYYY-MM-DD'))TABLESPACE rptfact2009 ( SUBPARTITION P1SUB1 VALUES ('ACTIVE') TABLESPACE rptfact2009, SUBPARTITION P1SUB2 VALUES ('INACTIVE') TABLESPACE rptfact2009 ), PARTITION P2 VALUES LESS THAN (TO_DATE('2003-03-01','YYYY-MM-DD')) TABLESPACE rptfact2009 ( SUBPARTITION P2SUB1 VALUES ('ACTIVE') TABLESPACE rptfact2009, SUBPARTITION P2SUB2 VALUES ('INACTIVE') TABLESPACE rptfact2009 ) )
复合范围散列分区
这种分区是基于范围分区和散列分区,表首先按某列进行范围分区,然后再按某列进行散列分区。
partition by range(transaction_date)subpartition by hash(transaction_id) subpartitions 3 store in (dinya_space01,dinya_space02,dinya_space03) ( partition part_01 values less than(to_date(‘2006-01-01’,’yyyy-mm-dd’)), partition part_02 values less than(to_date(‘2010-01-01’,’yyyy-mm-dd’)), partition part_03 values less than(maxvalue) );
表分区的维护
添加分区
ALTER TABLE SALES ADD PARTITION P3 VALUES LESS THAN(TO_DATE('2003-06-01','YYYY-MM-DD'));
ALTER TABLE SALES MODIFY PARTITION P3 ADD SUBPARTITION P3SUB1 VALUES('COMPLETE');
删除分区
ALTER TABLE SALES DROP PARTITION P3;
ALTER TABLE SALES DROP SUBPARTITION P4SUB1;
截断分区
指删除某个分区中的数据,并不会删除分区,也不会删除其它分区中的数据。
ALTER TABLE SALES TRUNCATE PARTITION P2;
ALTER TABLE SALES TRUNCATE SUBPARTITION P2SUB2;
合并分区
将相邻的分区合并成一个分区,结果分区将采用较高分区的界限。
ALTER TABLE SALES MERGE PARTITIONS P1,P2 INTO PARTITION P2;
拆分分区
将一个分区拆分两个新分区,拆分后原来分区不再存在。注意不能对HASH类型的分区进行拆分。
ALTER TABLE SALES SBLIT PARTITION P2 AT(TO_DATE('2003-02-01','YYYY-MM-DD')) INTO (PARTITION P21,PARTITION P22);
接合分区(coalesca)
将散列分区中的数据接合到其它分区中,当散列分区中的数据比较大时,可以增加散列分区,然后进行接合,值得注意的是,接合分区只能用于散列分区中。
ALTER TABLE SALES COALESCA PARTITION;
重命名表分区
ALTER TABLE SALES RENAME PARTITION P21 TO P2;
查询表上有多少分区
SELECT * FROM useR_TAB_PARTITIONS WHERE TABLE_NAME='tableName'
查询出所有的分区表
select * from user_tables a where a.partitioned='YES'
显示数据库所有分区表的信息
select * from DBA_PART_TABLES
相关推荐
- 分区表的管理可能比非分区表复杂,尤其是当涉及到大量分区时。 - 对于频繁更改分区键的场景,分区表的维护成本较高。 #### 四、分区类型及示例 ##### 1. 范围分区 范围分区是根据一个列的值的范围来决定数据存储...
### Oracle表分区、建表空间与用户管理 #### 一、表空间的创建与管理 在Oracle数据库中,**表空间**(Tablespace)是物理存储的逻辑容器,它由一个或多个数据文件组成。创建一个新的表空间对于数据库的管理非常重要...
在实际应用中,还需要关注分区表的索引、物化视图、分区维护操作(如添加、合并和拆分分区)等方面,以确保系统性能和可维护性。 总结来说,Oracle表分区是大型数据库系统中的重要优化手段,通过合理规划和应用,...
已存在的非分区表无法直接转化为分区表,需要通过特定的在线重定义操作来完成。此外,分区会增加数据库的复杂性,可能需要更多的存储空间,并且对数据库设计和维护提出了更高要求。 Oracle表分区主要有以下几种类型...
在创建Oracle表分区之前,需要先创建一个分区表实例。创建分区表实例的SQL语句如下: ``` create table DE_TEST( name_tag varchar2(10), day_tag DATE) PARTITION BY RANGE (day_tag) ( PARTITION DE_TEST_...
- 已经存在的表不能直接转化为分区表,但Oracle提供了在线重定义功能。 #### 四、表分区的类型及操作方法 1. **范围分区**:最常用的分区类型之一,根据分区键的范围将数据映射到各个分区。通常使用日期作为分区键...
Oracle数据库中的表分区是一种优化大型数据表性能的技术,它将一个大表划分为多个更小、更易管理的部分,每个部分称为一个分区。通过分区,可以提高查询速度、简化管理和维护,以及改善备份和恢复的效率。以下是...
在下载的“oracle表分区”压缩包中,可能包含了演示如何在Oracle环境中创建、操作和管理分区表的SQL脚本和文档。通过学习和实践这些示例,你可以深入理解并掌握Oracle表分区技术,从而更好地应对大数据量的挑战。
- 分区表和索引:大型表和索引可以被进一步划分为更小、更容易管理的部分。比如,Table T1 和 Index I1 可以被分割成多个分区。 分区带来的好处包括: - 表可用性:分区可以让每个分区独立管理,备份和恢复操作...
Oracle数据库中的表分区是数据库设计中的一个重要概念,它允许我们将大型数据表划分为较小、更易管理和查询的部分。本文将深入探讨Oracle表分区的详细知识,包括其原理、类型、优势以及如何在实际操作中应用。 一、...
总之,Oracle表分区是一项强大的数据库管理技术,它在处理大规模数据时提供了许多优势,但也需要数据库管理员掌握相关的知识和技能来有效管理分区表。随着数据量的不断增长,合理利用分区策略可以帮助企业节省维护...
- **维护和管理**:分区表的维护和备份恢复可能更复杂,需要考虑如何处理跨分区的操作,以及如何有效地执行分区级别的DML操作。 - **性能监控**:分区后,数据库管理员需要持续监控分区性能,适时调整分区策略,如...
本篇将详细介绍Oracle分区的原理、优缺点以及各种分区方法,并提供相关操作示例。 一、Oracle分区简介 Oracle分区的核心理念是“分而治之”,它将大表和索引分成多个小的逻辑单元,称为分区。这种技术有助于减少...
Oracle表分区技术是一种高效管理大型数据库表的策略,它通过将大表划分为较小的、独立的分区,提高数据管理的便捷性和性能。这一技术自Oracle8开始引入,旨在应对数据量急剧增长带来的挑战。 首先,分区技术的核心...
- 已存在的非分区表转换成分区表较为复杂,Oracle提供在线重定义功能解决这一问题。 - 需要更多的存储空间,因为每个分区都是独立的表空间。 - 设计和管理分区需要专业知识,增加了数据库设计的复杂性。 4. **表...
- 已经存在的表不能直接转换为分区表,但Oracle提供在线重定义表的功能,可以在一定程度上解决这一问题。 #### 四、表分区的几种类型及操作方法 - **范围分区**:根据特定的范围将数据分配到各个分区。最常见的...