一、概述
分区表的用途和优点:
1. 降低故障引起的损失;
2. 均衡I/O,减少竞争;
3. 提高查询速度,这一点在数据仓库的TP查询特别有用;
*TP查询:Transaction Processing,事务处理查询?这点不太清楚、网上资料也少,没查到
二、创建表分区
*首先通过下列语句找到目标数据库中的表空间名:
select tablespace_name,file_name,bytes/1024/1024 as MB from dba_data_files order by tablespace_name;
1. 范围分区:关键字RANGE,创建这种分区后,插入的数据会根据指定的分区键值范围进行分布,当数据在范围内均匀分布时,性能最好。
指定某一列的键值创建分区表:
例:创建一个商品零售表、包含四个分区,记录按照日期所在的季度分区:
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 TB_3,
--2011年第二个季度为part_02分区
partition par_02 values less than(to_date('2011-07-01','yyyy-mm-dd')) tablespace TB_4,
--2011年第三个季度为part_03分区
partition par_03 values less than(to_date('2011-10-01','yyyy-mm-dd')) tablespace TB_3,
--2011年第四个季度为part_04分区
partition par_04 values less than(to_date('2012-01-01','yyyy-mm-dd')) tablespace TB_4
);
之后我们向该表插入几条记录看下结果:
insert into ware_retail_part values(1,to_date('2011-01-21','yyyy-mm-dd'),'Pad');
insert into ware_retail_part values(2,to_date('2011-04-01','yyyy-mm-dd'),'Pad');insert into ware_retail_part values(3,to_date('2011-07-25','yyyy-mm-dd'),'Pad');
insert into ware_retail_part values(4,to_date('2011-12-31','yyyy-mm-dd'),'Pad');
查询该表中某个分区中的数据:
select *from ware_retail_part partition(par_01);
指定某几列的键值创建分区表:
例:创建一个商品零售表、包含四个分区,按照日期和销售序号进行分区:
create table ware_retail_part2 --创建一个描述商品零售的数据表
(
id integer primary key,--销售编号
retail_date date,--销售日期
ware_name varchar2(50)--商品名称
)
partition by range(id,retail_date)
(
--part_01分区
partition par_01 values less than(10,to_date('2011-04-01','yyyy-mm-dd')) tablespace TB_3,
--part_02分区
partition par_02 values less than(20,to_date('2011-07-01','yyyy-mm-dd')) tablespace TB_4,
--part_03分区
partition par_03 values less than(maxvalue,maxvalue) tablespace TB_3
);
最后一句有必要提一下,意思就是ID大于20、日期大于2011-07-01的记录全部存到第三个分区。
*注:这里指定的表空间块大小要一致,否则会报ORA-14519错误;这时需要修改对应表空间的块大小:
alter system set db_block_size=xxxx;
如果修改不了,可以参考这篇文章:http://blog.csdn.net/victory_xing126/article/details/45126247
2. 散列分区:又叫Hash分区;实在列的取值范围难以确定的情况下采用的分区方法。一般,下面几种情况可以采用Hash分区:
·DBA无法获知具体的数据值;
·数据的分布有Oracle处理;
·每个分区有自己的表空间。
例1:创建一个商品零售表,将表的ID列设为Hash键来决定记录的所在分区
create table ware_retail_part3 --创建一个描述商品零售的数据表
(
id integer primary key,--销售编号
retail_date date,--销售日期
ware_name varchar2(50)--商品名称
)
partition by hash(id)
(
partition par_01 tablespace TB_3,
partition par_02 tablespace TB_4
);
此时,向其中插入数据,Oracle会自动计算ID列的Hash值、从而决定该条记录该被存到哪个分区。
inser