|
oracle数据库表分区
分区功能的优势:可以使查询及维护操作的性能大大提高;可以极大简化常见的管理任务;是构建千兆字节数据系统或超高可用性系统的关键工具。
分区功能的基本知识:分区功能能够将表、索引或索引组织表进一步细分为段。这些数据库对象的段叫做分区。每个分区都有自己的名称,还可以选择自己的存储特性。从管理员角度来说:一个分区后的对象具有多个段,这些段可以进行集体管理,也可单独管理,在管理分区后的对象时有相当大的灵活性。从应用程序角度来说:分区后的表与非分区表完全相同,使用sql dml命令访问分区后的表时,无需任何修改。表的分区是通过“分区键”来实现的,分区键指的是一些列,这些列决定了某一行数据所在的分区。
表空间:是一个或多个数据文件的集合,所有的数据对象都存放在指定的表空间中,主要存放的是表。
分区表:当表中的数据量不断增大,查询数据的速度就会变慢,这时就应该考虑对表进行分区。表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间,查询数据时,不至于每次都扫描整张表。
表分区的类型及操作方法
范围分区:将数据基于范围映射到每一个分区,这个范围是在创建分区时指定的分区键决定的;分区键通常采用日期。当使用范围分区时,需要参考以下规则:
1、每个分区都必须有一个VALUES LESS THEN子句,它指定了一个不包括在该分区中的上限值。分区键的任何值等于或者大于这个上限值的记录都会被加入到下一个分区中。
2、除第一个外的所有分区,都会有一个隐式的下限值,该值为此分区的前一个分区的上限值。
3、在最高的分区中,MAXVALUE被定义,MAXVALUE代表了一个不确定的值,这个值高于其它分区中的任何分区键的值
示例:假设有一个CUSTOMER表,表中有数据200000行,我们将此表通过CUSTOMER_ID进行分区,每个分区存储100000行,我们将每个分区保存到单独的表空间中,这样数据文件就可以跨越多个物理磁盘。下面是创建表和分区的代码:
- CREATE TABLE CUSTOMER
- (
- CUSTOMER_ID NUMBER NOT NULL PRIMARY KEY,
- FIRST_NAME VARCHAR2(30) NOT NULL,
- LAST_NAME VARCHAR2(30) NOT NULL,
- PHONE VARCHAR2(15) NOT NULL,
- EMAIL VARCHAR2(80),
- STATUS CHAR(1)
- )
- PARTITION BY RANGE (CUSTOMER_ID)
- (
- PARTITION CUS_PART1 VALUES LESS THAN (100000) TABLESPACE CUS_TS01,
- PARTITION CUS_PART2 VALUES LESS THAN (200000) TABLESPACE CUS_TS02
- )
复制代码- CREATE TABLE ORDER_ACTIVITIES
- (
- 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 ORD_ACT_PART01 VALUES LESS THAN (TO_DATE('2015-01-01','YYYY-MM-DD')) TABLESPACE ORD_TS01,
- PARTITION ORD_ACT_PART02 VALUES LESS THAN (TO_DATE('2015-02-01','YYYY-MM-DD')) TABLESPACE ORD_TS02,
- PARTITION ORD_ACT_PART02 VALUES LESS THAN (TO_DATE('2015-03-01','YYYY-MM-DD')) TABLESPACE ORD_TS03
- )
复制代码
|
|