Oracle 11g表分区与索引分区(《Oracle从入门到精通》读书笔记4)

一、概述

分区表的用途和优点:
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值