制定的分区(表空间)中。
当然,我们还可以根据需求,使用两个字段的范围分布来分区,如partition by range ( transaction_id ,transaction_date), 分区条件中的值也做相应的改变,请读者自行测试。
--------------------------------- 以上没有在pl/sql 测试!
1.2) 范围分区创建成功之后的相关操作测试;
a)向表添加测试数据:
insert into dinya_test values(1,12,'BOOKS',sysdate);
insert into dinya_test values(2,12, 'BOOKS',sysdate+30);
insert into dinya_test values(3,12, 'BOOKS',to_date('2006-05-30','yyyy-mm-dd'));
insert into dinya_test values(4,12, 'BOOKS',to_date('2007-06-23','yyyy-mm-dd'));
insert into dinya_test values(5,12, 'BOOKS',to_date('2011-02-26','yyyy-mm-dd'));
insert into dinya_test values(6,12, 'BOOKS',to_date('2011-04-30','yyyy-mm-dd'));
b)查询
b.1) 如果查询全表数据
select * from dinya_test; 如下图:
< 全表数据>
select * from dinya_test partition (part_01); 如下图:
select * from dinya_test partition (part_02); 如下图:
select * from dinya_test partition (part_03); 如下图:
update dinya_test partition (part_01) t set t.item_description= 'DESK' where t.transaction_id= 1 ;
select * from dinya_test partition (part_01) ;BOOKS->DESK( 发生变化)
select * from dinya_test (此结果就不用查看了,肯定变了);
--- 删除part_03 分区中transaction_id=4 的记录:
delete from dinya_test partition (part_03) t where t.transaction_id= 4 ;
select * from dinya_test partition(part_03)
少了transaction_id=4的记录(与上图对比)
c)索引的创建:
c.1)局部索引的创建:
create index dinya_idx_t on dinya_test(item_id)
local
(
partition idx_1 tablespace dinya_space01,--- 分区名为:idx_1
partition idx_2 tablespace dinya_space02, --- 分区名为:idx_2
partition idx_3 tablespace dinya_space03--- 分区名为:idx_3
); ---pl/sql 测试成功
注:
select * from ALL_TAB_PARTITIONS where table_name = 'DINYA_TEST'
select * From dba_ind_partitions where partition_name= 'IDX_1'
c.2)全局索引的创建:
全局索引建立时global 子句允许指定索引的范围值,这个范围值为索引字段的范围值:
create index dinya_idx_t on dinya_test(item_id)
global partition by range (item_id)
(
partition idx_1 values less than ( 1000 ) tablespace dinya_space01,
partition idx_2 values less than ( 10000 ) tablespace dinya_space02,
partition idx_3 values less than ( maxvalue ) tablespace dinya_space03
); ----PL/SQL 末测试[ 参照以上local] ;
整个表创建索引:
Create index dinya_idx_t on dinya_test(item_id);
备注: select * from all_indexes(dba_indexes 、all_ind_columns 、user_ind_columns 、dba_ind_columns )
1.3) Hash分区(散列分区)
——————————以下没有在机器上测试
散列分区为通过指定分区编号来均匀分布数据的一种分区类型,因为通过在I/O 设备上进行散列分区,使得这些分区大小一致。如将物料交易表的数据根据交易ID 散列地存放在指定的三个表空间中:
create table dinya_test
(
transaction_id number primary key,
item_id number(8) not null,
item_description varchar2(300),
transaction_date date
)
partition by hash(transaction_id)
(
partition part_01 tablespace dinya_space01,
partition part_02 tablespace dinya_space02,
partition part_03 tablespace dinya_space03
);
建表成功,此时插入数据,系统将按transaction_id 将记录散列地插入三个分区中,这里也就是三个不同的表空间中。
——————————以上没有在机器上测试;
1.4) 列表分区:该分区的特点是某列的值只有几个,基于这样的特点我们可以采用列表分区。
示例1:
CREATE TABLE PROBLEM_TICKETS
(
PROBLEM_ID NUMBER(7) NOT NULL PRIMARY KEY,
DESCRIPTION VARCHAR2(2000),
CUSTOMER_ID NUMBER(7) NOT NULL,
DATE_ENTERED DATE NOT NULL,
STATUS VARCHAR2(20)
)
PARTITION BY LIST (STATUS)
(
PARTITION PROB_ACTIVE VALUE