ORACLE 分区
在建设数据仓库过程中,经常会有大量数据,短时间内表中数据量有限,查询性能还可以,但随着时间的延长,表中数据量迅速增加,查询速度就会变慢,性能下降,这时就要考虑对表进行分区。
一、oracle的分区
当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区。表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间(物理文件上),这样查询数据时,不至于每次都扫描整张表。
二、oracle分区的作用
Oracle的表分区功能通过改善可管理性、性能和可用性,从而为各式应用程序带来了极大的好处。通常,分区可以使某些查询以及维护操作的性能大大提高。此外,分区还可以极大简化常见的管理任务,分区是构建千兆字节数据系统或超高可用性系统的关键工具。
分区功能能够将表、索引或索引组织表进一步细分为段,这些数据库对象的段叫做分区。每个分区有自己的名称,还可以选择自己的存储特性。从数据库管理员的角度来看,一个分区后的对象具有多个段,这些段既可进行集体管理,也可单独管理,这就使数据库管理员在管理分区后的对象时有相当大的灵活性。
三、oracle的分区包括集中:
1.LIST分区
2.RANGE分区
3.HASH分区
4.范围-散列分区
5.范围-列表分区
四、oracle RANGE分区 例子
1.创建表,创建分区
createtable TMP_LXQ_1
(
PROPOSALNO VARCHAR2(22),
STARTDATE 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.拆分分区
ALTER TABLEtmp_test1
SPLIT PARTITIONcomcode_hebei VALUES('410000000')
INTO (PARTITIONcomcode_shijiazhuang,PARTITION comcode_tangshan);
4.合并分区
ALTER TABLEtmp_test1
MERGE PARTITIONscomcode_shijiazhuang,comcode_tangshan
INTO PARTITIONcomcode_hebei;
六、问题
select count(*)
from TMP_LXQ_1 t
where t.startdate >= date '2013-03-01';
--37s
select count(*)
from temp_1 t
where t.startdate >= date '2013-03-01';
--9s
源表:temp_1
分区后表:TMP_LXQ_1
对这两个表进行同等条件的查询,发现分区后的表的查询速度反而要慢,昨天查询同样的语句,TMP_LXQ_1要用37s,而temp_ciinsuredemand只需要9s。
这两个表中的数据都为9千多万,查询速度都不是很快,但是不清楚为什么分区后的表的查询速度比不分区的表要慢,并且慢这么多。
ORACLE 分区的更多相关文章
- oracle 分区和分区索引
一.个人理解:建表时一般都会指定在一个表空间上,但是可能随着表空间扩大,查询越来越慢,分区表就是将一个表实际存在不同的表空间,oracle存储分为块,断,表空间.新建一个表,会给表分配指定大小的段,段 ...
- Oracle体系结构之Oracle分区
目录 Oracle分区 0 一.Oracle分区理论知识 1 二.分区表的实现方式 1 1.范围分区(range partition table) 1 2.列表分区(list partitioning ...
- 01 Oracle分区索引
Oracle分区索引 索引与表类似,也可以分区: 分区索引分为两类: Locally partitioned index(局部分区索引) Globally partitioned index(全局 ...
- Oracle分区索引
索引与表类似,也可以分区: 分区索引分为两类: Locally partitioned index(局部分区索引) Globally partitioned index(全局分区索引) 下面就来详细解 ...
- Oracle分区
可以参考文档:http://docs.oracle.com/cd/E18283_01/server.112/e16541/part_admin001.htm#insertedID0 (支持11g和12 ...
- ORACLE分区--表分区
.love_flying_snow Oracle表分区 Oracle . 废话少说,直接讲分区语法. Oracle表分区分为四种:范围分区,散列分区,列表分区和复合分区. 一:范围分区 就是根据数据库 ...
- oracle分区提高篇
一. 分区表理论知识 Oracle提供了分区技术以支持VLDB(Very Large DataBase).分区表通过对分区列的判断,把分区列不同的记录,放到不同的分区中.分区完全对应用透明. Or ...
- 柯南君 :Oracle 分区技术 之 怎样支撑大数据操作?
前段时间.看了罗女士( 资深技术顾问 - Oracle 中国 顾问咨询部)关于<大批量数据处理技术的演讲>视频.感觉受益良多,结合多年的知识积累,柯南君给大家分享一下: 交流内容: 一.O ...
- [Oracle]分区索引
上一节学习了分区表,接着学习分区索引. (一)什么时候对索引进行分区 · 为了避免移动数据时重建整个索引,可对索引分区,在重建索引时,只需重建与数据分区相关的索引: · 在对分区表进行维护时,为了避免 ...
随机推荐
- IDT hook KiTrap03
关于idt的基本知识就不进行赘述了,先看一个例子 0 ;------->进入内核,找到中断处理例程KiTrap03 0 这段代码执行,触发3号中断,然后开始执行KiTrap03例程,要知道,执行 ...
- TestDirector域或工程用户的管理
一.添加用户 单击界面上的"Users"按钮,进入如下图: 我们可以添加新用户,删除用户,导入用户,修改用户密码,用户的详细信息. 1.单击"New"按钮为域或 ...
- Ubuntu rsync同步
>服务器端:Ubuntu 9.10 - 192.168.1.3客户端:Ubuntu 10.04 - 192.168.1.73 我们先来设置一下服务器端的配置 1.ubuntu系统安装完之后,rs ...
- (CentOS) 程序安装包管理:yum
简介: Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器.基于RPM包管理,能够从指定的服务器 ...
- eclipse使用replace命令替换整个project/workspace的某个字符串
比如说为了在调试的时候方便,我的应用程序中有很多System.out.println() 调试好了,要发布了,如何把这些一次性注释掉呢?见下图
- mysql union和union all
UNION 操作符用于合并两个或多个 SELECT 语句的结果集.UNION 内部的 SELECT 语句必须拥有相同数量的列.列也必须拥有相似的数据类型. union 是对数据进行并集操作,不包括重复 ...
- [原]HDU-1598-find the most comfortable road(暴力枚举+Kruskal最小生成树)
题意: 给出一个图,然后Q个询问,每次询问从一个节点到另一个节点,联通图中的“最大边和最小边之差”的最小值,但如果节点之间不连通,则输出-1. 思路:由于询问Q < 11,m < 1000 ...
- 18.allegro区域约束规则设置
一.线宽和线间距 --- ---------------- 然后再电路板上创建一个区域 ----- ---- --- ---- ------------------------------
- JavaScript关闭窗口的方法
当你创建了一个新窗口时,将open()方法的返回值分配给一个变量非常重要.比如,下面的语句就是创建一个新窗口,然后立即关闭它: win = window.open("http://www.d ...
- 移动WebApp开发框架(珍藏)
1.Jquery Mobilehttp://demos.jquerymobile.com/1.4.5/button-markup/http://andymatthews.net/code/jQuer ...