当前位置:数据库 > Oracle >>

oracle对表进行分区

oracle对表进行分区
 
在建设数据仓库过程中,经常会有大量数据,短时间内表中数据量有限,查询性能还可以,但随着时间的延长,表中数据量迅速增加,查询速度就会变慢,性能下降,这时就要考虑对表进行分区。
 
一、oracle的分区
 
当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区。表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间(物理文件上),这样查询数据时,不至于每次都扫描整张表。
 
二、oracle分区的作用
 
Oracle的表分区功能通过改善可管理性、性能和可用性,从而为各式应用程序带来了极大的好处。通常,分区可以使某些查询以及维护操作的性能大大提高。此外,分区还可以极大简化常见的管理任务,分区是构建千兆字节数据系统或超高可用性系统的关键工具。
 
分区功能能够将表、索引或索引组织表进一步细分为段,这些数据库对象的段叫做分区。每个分区有自己的名称,还可以选择自己的存储特性。从数据库管理员的角度来看,一个分区后的对象具有多个段,这些段既可进行集体管理,也可单独管理,这就使数据库管理员在管理分区后的对象时有相当大的灵活性。
 
三、oracle的分区包括集中:
 
1.LIST分区
 
2.RANGE分区
 
3.HASH分区
 
4.范围-散列分区
 
5.范围-列表分区
 
 
 
四、oracle RANGE分区 例子
 
1.创建表,创建分区
 
createtable TMP_LXQ_1
 
(
 
  PROPOSALNO              VARCHAR2(22),
 
  DEMANDNO                VARCHAR2(50) not null,
 
  POLICYNO                VARCHAR2(22),
 
  LICENSENO               VARCHAR2(15),
 
  STARTDATE               DATE,
 
  ENDDATE                 DATE
 
)
 
partition byrange(STARTDATE) (
 
partition part_t01values less than(to_date('2008-01-01','yyyy-mm-dd')) ,
 
partition part_t02values less than(to_date('2009-01-01','yyyy-mm-dd')) ,
 
partition part_t03values less than(to_date('2010-01-01','yyyy-mm-dd')) ,
 
partition part_t04values less than(to_date('2011-01-01','yyyy-mm-dd')) ,
 
partition part_t05values less than(to_date('2012-01-01','yyyy-mm-dd')) ,
 
partition part_t06values less than(to_date('2013-01-01','yyyy-mm-dd')) ,
 
partition part_t07values less than(maxvalue)
 
);
 
 
 
2.查询分区信息
 
--通过user_tab_partitions 视图查看
 
SELECT  partition_name, high_value
 
  FROM user_tab_partitions
 
 WHERE table_name = 'TMP_LXQ_1';
 
 
 
--通过user_part_key_columns视图查看分区表使用的列
 
SELECT* FROM user_part_key_columns WHERE name = 'TMP_LXQ_1';
 
 
 
3.添加分区
 
ALTERTABLE TMP_LXQ_1
 
ADD PARTITIONpart_t08 VALUES LESS THAN (to_date('2014-01-01','yyyy-mm-dd'));
 
 
 
4.删除分区
 
ALTERTABLE TMP_LXQ_1 DROP PARTITIONpart_t07;
 
--当删除了一个分区,也同时删除了该分区中所有的数据。
 
 
 
5.合并分区
 
--注:不能将分区合并到界限较低的分区。
 
--下面的SQL,分别将p201001- p201009合并为3个分区
 
--注:普通的表分区,只能2个分区合成1个分区。3个合成1个的时候,会抱错。
 
ALTERTABLE TMP_LXQ_1
 
MERGE PARTITIONSpart_t01,part_t02,part_t03
 
INTO PARTITIONpart_t03;
 
--错误:
 
--ORA-14126:只有<并行子句>可遵循结果分区的说明
 
 
 
--合并分区
 
ALTERTABLE TMP_LXQ_1
 
MERGE PARTITIONSpart_t01,part_t02
 
INTO PARTITIONpart_t02;
 
 
 
6.拆分分区
 
 ALTER TABLE TMP_LXQ_1
 
SPLIT PARTITIONpart_t02 AT(TO_DATE('2008-01-01','YYYY-MM-DD'))
 
INTO (PARTITIONpart_t01,PARTITION part_t02);
 
 
 
五、oracle LIST分区 例子
 
drop tabletmp_test1;
 
create tabletmp_test1
 
(
 
comcode varchar2(10)not null,
 
comnamevarchar2(120) not null,
 
score decimal(18,2)null
 
)
 
PARTITION BY LIST(comcode) (
 
PARTITIONcomcode_beijing VALUES ('100000000'),
 
PARTITIONcomcode_tianjin VALUES ('200000000'),
 
PARTITIONcomcode_shanghai VALUES ('300000000'),
 
PARTITIONcomcode_hebei VALUES ('400000000','410000000'),
 
PARTITIONcomcode_shandong VALUES ('500000000'),
 
PARTITIONcomcode_neimenggu VALUES ('600000000')
 
);
 
 
 
insert intotmp_test1
 
select'100000000','北京',100 from dual;
 
commit;
 
insert intotmp_test1
 
select'200000000','天津',100 from dual;
 
commit;
 
insert intotmp_test1
 
select'300000000','上海',100 from dual;
 
commit;
 
insert intotmp_test1
 
select'400000000','河北',100 from dual;
 
commit;
 
insert intotmp_test1
 
select'500000000','山东',100 from dual;
 
commit;
 
insert intotmp_test1
 
select'600000000','内蒙',100 from dual;
 
commit;
 
 
 
1.添加分区
 
ALTER TABLEtmp_test1
 
ADD PARTITIONcomcode_henan VALUES ('700000000');
 
 
 
2.删除分区
 
ALTER TABLEtmp_test1
 
DROP PARTITIONcomcode_henan;
 
 
 
3.拆
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,