Orcale数据库表分区

一:定义

表空间:是一个或多个数据文件的集合,所有的数据对象都存放在指定的表空间中,但主要存放的是表, 所以称作表空间。

分区表:当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区。表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间(物理文件上),这样查询数据时,不至于每次都扫描整张表。

二:Oracle数据库表分区的几种类型
范围分区:
范围分区将数据基于范围映射到每一个分区,这个范围是你在创建分区时指定的分区键决定的。这种分区方式是最为常用的,并且分区键经常采用日期来分区。还有其他分区,用到再总结。
         1)每一个分区都必须有一个VALUES LESS THEN子句,它指定了一个不包括在该分区中的上限值。分区键的任何值等于或者大于这个上限值的记录都会被加入到下一个高一些的分区中。
         2)   所有分区,除了第一个,都会有一个隐式的下限值,这个值就是此分区的前一个分区的上限值。
         3)   在最高的分区中,MAXVALUE被定义。MAXVALUE代表了一个不确定的值。这个值高于其它分区中的任何分区键的值,也可以理解为高于任何分区中指定的VALUE LESS THEN的值,同时包括空值。

        4)   不在分区字段上建立分区索引,在别的字段上建立索引相当于全局索引。效率低。

--按时间分区
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('01- MAY -2003','DD-MON-YYYY')),
   PARTITION ORD_ACT_PART02 VALUES LESS THAN (TO_DATE('01-JUN-2003','DD-MON-YYYY')) ,
   PARTITION ORD_ACT_PART02 VALUES LESS THAN (TO_DATE('01-JUL-2003','DD-MON-YYYY'))
 );

--按MAXVALUE
CREATE TABLE RangeTable
 (
   idd   INT PRIMARY KEY ,
   iNAME VARCHAR(10),
   grade INT
 )
 PARTITION  BY  RANGE (grade)
 (
       PARTITION  part1 VALUES  LESS  THEN (1000) ,
       PARTITION  part2 VALUES  LESS  THEN (MAXVALUE)
 );

三、分区操作

 

--查看分区情况
select * from user_tab_partitions where table_name ='tableName';
--查看分区数据
select * from tablename partiton(p1);
--修改分区
--添加:
alter table tablename add partition p4 values less than(value);
--删除:
alter table tablename drop partiton p4;
--截断分区 截断某个分区是指删除某个分区中的数据,并不会删除分区,也不会删除其它分区中的数据。
alter table tablename truncate partiton p2;
--合并分区是将相邻的分区合并成一个分区,结果分区将采用较高分区的界限,值得注意的是,不能将分区合--并到界限较低的分区。以下代码实现了P1 P2分区的合并:
ALTER TABLE TABLENAME MERGE PARTITIONS P1,P2 INTO PARTITION P2;
--拆分分区:将一个分区拆分两个新分区,拆分后原来分区不再存在。注意不能对HASH类型的分区进行拆分。
ALTER TABLE TABLENAME SBLIT PARTITION P2 AT(TO_DATE('2003-02-01','YYYY-MM-DD')) INTO (PARTITION P21,PARTITION P22);
--更新数据是操作时不可以跨分区操作,会出现错误,需要设置可移动的分区才能进行跨分区查询。
alter table tablename enable row movement;

 

参考:

https://www.cnblogs.com/gemine/p/9011898.html

https://www.cnblogs.com/wayne-ivan/p/6416539.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值