在建设数据仓库过程中,经常会有大量数据,短时间内表中数据量有限,查询性能还可以,但随着时间的延长,表中数据量迅速增加,查询速度就会变慢,性能下降,这时就要考虑对表进行分区。

一、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 分区的更多相关文章

  1. oracle 分区和分区索引

    一.个人理解:建表时一般都会指定在一个表空间上,但是可能随着表空间扩大,查询越来越慢,分区表就是将一个表实际存在不同的表空间,oracle存储分为块,断,表空间.新建一个表,会给表分配指定大小的段,段 ...

  2. Oracle体系结构之Oracle分区

    目录 Oracle分区 0 一.Oracle分区理论知识 1 二.分区表的实现方式 1 1.范围分区(range partition table) 1 2.列表分区(list partitioning ...

  3. 01 Oracle分区索引

    Oracle分区索引   索引与表类似,也可以分区: 分区索引分为两类: Locally partitioned index(局部分区索引) Globally partitioned index(全局 ...

  4. Oracle分区索引

    索引与表类似,也可以分区: 分区索引分为两类: Locally partitioned index(局部分区索引) Globally partitioned index(全局分区索引) 下面就来详细解 ...

  5. Oracle分区

    可以参考文档:http://docs.oracle.com/cd/E18283_01/server.112/e16541/part_admin001.htm#insertedID0 (支持11g和12 ...

  6. ORACLE分区--表分区

    .love_flying_snow Oracle表分区 Oracle . 废话少说,直接讲分区语法. Oracle表分区分为四种:范围分区,散列分区,列表分区和复合分区. 一:范围分区 就是根据数据库 ...

  7. oracle分区提高篇

      一. 分区表理论知识 Oracle提供了分区技术以支持VLDB(Very Large DataBase).分区表通过对分区列的判断,把分区列不同的记录,放到不同的分区中.分区完全对应用透明. Or ...

  8. 柯南君 :Oracle 分区技术 之 怎样支撑大数据操作?

    前段时间.看了罗女士( 资深技术顾问 - Oracle 中国 顾问咨询部)关于<大批量数据处理技术的演讲>视频.感觉受益良多,结合多年的知识积累,柯南君给大家分享一下: 交流内容: 一.O ...

  9. [Oracle]分区索引

    上一节学习了分区表,接着学习分区索引. (一)什么时候对索引进行分区 · 为了避免移动数据时重建整个索引,可对索引分区,在重建索引时,只需重建与数据分区相关的索引: · 在对分区表进行维护时,为了避免 ...

随机推荐

  1. 最近在看 ASP.NET 5,有关官方实现的 OAuth 2 包

    有了官方实现的 OAuth 2 包,再扩展到国内就方便多了(懒得找第三方). 官方实现的有关授权和验证的包:https://github.com/aspnet/Security 根据这些,我就扩展了几 ...

  2. poj 2762(强连通+判断链)

    题目链接:http://poj.org/problem?id=2762 思路:首先当然是要缩点建新图,由于题目要求是从u->v或从v->u连通,显然是要求单连通了,也就是要求一条长链了,最 ...

  3. C# 使用WIN32API设置外部程序窗口无边框

    使用代码 var wnd = win32.FindWindowA(null, "窗口标题"); Int32 wndStyle = win32.GetWindowLong(wnd, ...

  4. STL erase函数

    1 各种迭代器erase实现 析构的基本工具 Template <class T> inline void destroy(T* pointer){ pointer->~T(); } ...

  5. Android核心分析 之十一Android GWES之消息系统

        Android GWES之Android消息系统                                                                        ...

  6. JavaPersistenceWithHibernate第二版笔记-第五章-Mapping value types-005控制类型映射(Nationalized、@LOB、@org.hibernate.annotations.Type)

    一.简介 1. 2. 3. 4. to override this default mapping. The JPA specification has a convenient shortcut a ...

  7. 解决 emulator-5554 disconnected !Cancelling错误

    http://www.xuebuyuan.com/351215.html 使用Android模拟器经常遇到连不上.连一次掉一次等诸多问题(转载+原创) 解决办法一: 在此种情形下,重启ADB即可: 1 ...

  8. CSS和JavaScript标签style属性对照表

    CSS和JavaScript标签style属性对照表一般情况是把"-"去掉,后面字母用大写. CSS语法 (不区分大小写) JavaScript语法 (区分大小写) border ...

  9. 文件相关操作工具类——FileUtils.java

    文件相关操作的工具类,创建文件.删除文件.删除目录.复制.移动文件.获取文件路径.获取目录下文件个数等,满足大多数系统需求. 源码如下:(点击下载 FileUtils.java) import jav ...

  10. VIM的配置文件(vimrc)在哪里?【Win7】

    如果你使用VIM有一段时间的话,你会想要修改它的一些配置,例如默认显示行号.在哪改呢? 答案是:vimrc 那这个配置文件在哪呢? 打开你的vi,在命令模式下,输入[:version],会看到如下图所 ...