oracle怎么分区最优,oracle分区查询效率-成都快上网建站

oracle怎么分区最优,oracle分区查询效率

ORACLE表空间和分区的合理设计求教

两个方案感觉上都不是太好,建议你还是先细化一下,看看表中数据的增长情况,分为两类,一类是增长较少的,一类是增长频繁的。

网站的建设创新互联专注网站定制,经验丰富,不做模板,主营网站定制开发.小程序定制开发,H5页面制作!给你焕然一新的设计体验!已为混凝土搅拌罐车等企业提供专业服务。

对于增长较少的,共同使用一个表空间,这样表空间较少,维护起来比较方便。

对于增长较多的,建议每个表占用一个表空间,然后每天一个分区,而且表空间最好分配到不同的硬盘,好处是系统性能较高,但麻烦的地方是维护较麻烦,需要详细规划。

ORACLE表分区

一.表分区策略

1.识别大表

采用ANALYZE TABLE语句进行分析,然后查询数据字典获得相应的数据量。

2.大表如何分区

可根据月份,季度以及年份等进行分区;

3.分区的表空间规划

要对每个表空间的大小进行估计

二.创建表分区

a.创建范围分区的关键字是'RANGE'

1.范围分区

create table ware_retail_part --创建一个描述商品零售的数据表

(

id integer primary key,--销售编号

retail_date date,--销售日期

ware_name varchar2(50)--商品名称

)

partition by range(retail_date)

(

--2011年第一个季度为part_01分区

partition par_01 values less than(to_date('2011-04-01','yyyy-mm-dd')) tablespace TEMP01,

--2011年第二个季度为part_02分区

partition par_02 values less than(to_date('2011-07-01','yyyy-mm-dd')) tablespace TEMP01,

--2011年第三个季度为part_03分区

partition par_03 values less than(to_date('2011-10-01','yyyy-mm-dd')) tablespace TEMP01,

--2011年第四个季度为part_04分区

partition par_04 values less than(to_date('2012-01-01','yyyy-mm-dd')) tablespace TEMP01

);

2.创建散列分区

3.组合分区:

4.interval 分区

三.创建索引分区

索引分区分为本地索引分区和全局索引分区,全局索引不反应基础表的结构,要分区只能进行范围分区。

创建索引分区要参照表分区

四.分区技术简介

优点:

1.减少维护工作量

2.增强数据的可用性

3.均衡I/O,提升性能

4.提高查询速度

5.分区对用户保持透明,用户感觉不到分区的存在。

五,管理表分区

1.添加表分区

ALTER TABLE...ALTER PARATITION

2.合并表分区

3.删除分区

ALTER TABLE...DROP PARTITION

删除分区时,里面的数据也会被删除。

-创建表和分区

create table sales--创建一个销售记录表

(

id number primary key,--记录编号

goodsname varchar2(10),--商品名

saledate date--销售日期

)

partition by range(saledate)--按照日期分区

(

--第一季度数据

partition part_sea1 values less than(to_date('2011-04-01','yyyy-mm-dd')) tablespace tbsp_1,

--第二季度数据

partition part_sea2 values less than(to_date('2011-07-01','yyyy-mm-dd')) tablespace tbsp_2,

--第三季度数据

partition part_sea3 values less than(to_date('2011-10-01','yyyy-mm-dd')) tablespace tbsp_1,

--第四季度数据

partition part_sea4 values less than(to_date('2012-01-01','yyyy-mm-dd')) tablespace tbsp_2

);

--创建局部索引

create index index_3_4 on sales(saledate)

local(

partition part_seal tablespace tbsp_1,

partition part_sea2 tablespace tbsp_2,

partition part_sea3 tablespace tbsp_1,

partition part_sea4 tablespace tbsp_2

);

--并入分区

alter table sales merge partitions part_sea3,part_sea4 into partition part_sea4;

--重建局部索引

alter table sales modify partition part_sea4 rebuild unusable local indexes;

六.管理索引分区

删除索引:DROP PARTITION

重建分区:REBUILT PARTITION

更名索引分区:RENAME PARTITION

分割索引分区:SPLIT PARTITION

oracle数据库怎么建分区

一般语法:

create table t_test (

pk_id number(30) not null,

add_date_time  DATE,

constraintPK_T_TEST primary key (pk_id)

)

PARTITION BY RANGE (add_date_time)

(

PARTITIONt_test_2013_less VALUES LESS THAN (TO_DATE('2013-01-01 00:00:00','yyyy-mm-ddhh24:mi:ss')) TABLESPACE TS_MISPS,

PARTITIONt_test_2013 VALUES LESS THAN (TO_DATE('2014-01-01 00:00:00','yyyy-mm-ddhh24:mi:ss')) TABLESPACE TS_MISPS,

PARTITION t_test_2014VALUES LESS THAN (TO_DATE('2015-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss'))TABLESPACE TS_MISPS

);

Oracle 高效的分区消除

1.高效的分区消除

分区表存在的最大意义在于,可以有效地做到分区消除

分区表其实是将一个大对象分成了多个小对象

同样的语句查询有相同记录的表,分区表的查询代价仅为111,逻辑读仅为566,而普通表的代价却为1298,逻辑读为5990,性能方面有着天壤之别。差别如此之大,应该是和分区表查询只遍历了13个分区中的一个有关。在分区表查询的执行计划中p_start和p_stop都标记上9,表示只遍历了第9个分区。这样避开了对其余12个分区的查询,就是分区消除

测试针对普通表的增加了 area_code 条件的相同 SQL 语句:

组合分区导致范围定位得更小了,只产生了60个逻辑读,比之前的566个逻辑读还要少。至于普通表的查询,因为始终是全表扫描,所以逻辑读依然和之前差不多,达到5931个。

组合分区虽然只有60个逻辑读,比之前范围分区的566个要少得多,但是代价却差不多,甚至还略大于之前的,因为分区数过多,调用有开销。在试验中,表的总记录数不过10万,全表扫描开销都不是太大,这时Oracle内部调用的开销影响就相对较大。如果表是一张超级大表,比如有上亿条记录,那这些开销相比而言就可以忽略不计了,

分区表应用在大表上更合适,至少要大于100万条记录的表方可考虑。


当前标题:oracle怎么分区最优,oracle分区查询效率
转载来于:http://kswjz.com/article/dsedejh.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流