yy’))
tablespace DEMO,
PARTITION PART_1 VALUES LESSTHAN(to_date(MAXVALUE)
tablespace DEMO
)
insert into drawlist values(to_date(‘31/12/2008’,’dd/mm/yyyy’));
insert into drawlist values(to_date(‘01/01/2009’,’dd/mm/yyyy’));
insert into drawlist values(to_date(‘06/06/2009’,’dd/mm/yyyy’));
insert into drawlist values(to_date(‘31/12/2010’,’dd/mm/yyyy’));
insert into drawlist values(to_date(‘01/01/2011’,’dd/mm/yyyy’));
insert into drawlist values(to_date(‘04/05/2011’,’dd/mm/yyyy’));
select *from drawlist partition(part_2); 显示结果:2009-1-1;2009-6-6;2010-12-31;
散列分区:会对分区键应用一个散列函数,以此确定数据应当放在N个分区中的哪个分区中。直到散列算法是将数据随机均匀的分布。为了使数据分布的更均匀,分区表的数目建议为2的幂,也就是1、4、8、16……
散列分区语法:
PARTITION BY HASH(列)(PARTITION 分区表名 tablespace表空间)
createtable hash_table (hash_no INTEGER not null )
PARTITIONBY HASH(hash_no)
(
PARTITION PART_1 tablespace DEMO,
PARTITION PART_2 tablespace DEMO,
PARTITION PART_3 tablespace DEMO,
PARTITION PART_4 tablespace DEMO,
)
对其随机插入500条测试语句
selectcount(*) from hash_table partition(part_1)
selectcount(*) from hash_table partition(part_2)
selectcount(*) from hash_table partition(part_3)
selectcount(*) from hash_table partition(part_4)
输出结果基本均匀分布,分别为:123、116、121、140。
列表分区:可以将数据按照列的值分类。列表分区语法如下:
PARTITIONBY LIST(列)
(
PARTITION 分区表名values(指定值1,指定值2……)
)
示例:根据用户所在地区将用户存储在不同分区中
create table area( code INTEGERnot null )
PARTITION BY LIST(code)
(
PARTITIONPART_1 values(102200,102202,102203),
PARTITIONPART_2 values(164300,164302,164303)
)
tablespace DEMO;
insert into area values(102200);
insert into area values(102203);
insert into area values(164300);
insert into area values(164303);
select * from area partition(part_1)
select * from area partition(part_2)
查询结果:在part_1分区中数据为102200、102202;part_2分区中数据位164300、164303;
组合分区:就是区间分区与散列分区或者区间分区与列表分区的组合。
区间-散列组合分区表语法:首先按照列1的值进行区间分区,然后按照列2散列分区。
PARTITION BY RANGE(列1) SUBPARTITION BY HASH(列2)(
PARTITION分区名 VALUES LESS THAN (值)
TABLESPACE表空间,
)
区间-列表组合分区表语法:先按照列1的值进行区间分区,然后按照列2指定值进行列表分区
PARTITION BY RANGE(列1) SUBPARTITION BY LIST(列2)(
PARTITION 分区名 VALUES LESS THAN (值) TABLESPACE 表空间
(
SUBPARTITION 子分区名 VALUES(列表指定值1……) TABLESPACE 表空间
)
)
组合分区示例:


select *from range_list partition(part_2);
返回值为:DT_DATE 2009-1-1,2010-12-31,2010-11-21;CODE 102200,164300,164300;
select *from range_list subpartition(part2_list);
结果为:DT_DATE 2009-1-1;CODE102200;
分区维护:增加分区、删除分区、截断分区、合并分区。
增加分区的语法:
ALTER TABLE 表名 ADD PARTITION 分区表名 VALUES LESS THAN(值)
例如:
ALTERTABLE DRAWLIST ADD PARTITION PART_4 VALUES LESS
THAN(TO_DATE(‘1/1/2012’,’DD/MM/YYYY’)) TABLESPACE DEMO;
删除分区语法:
ALTER TABLE 表名 DROP PARTITION 分区表名
例如:
ALTER TABLE DRAWLIST DROPPARTITION PART_3;
截断分区是删除当前分区中的数据,但不删除当前分区,也不影响其他分区。
语法:
ALTER TABLE 表名 TRUNCATE PARTITION 已存在的分区表
如:
ALTER TABLE DRAWLI ST TRUNCATEPARTITION PART_1;
合并分区是将两个分区的数据合并成一个分区里,注意:高界限的分区不能合并到低界限的分区中。
合并分区的语法:
ALTER TABLE 表名 MERGE PARTITIONS 分区表1,分区表2 INTO PARTITION 分区表2
例如:
ALTER TABLE drawlist MERGE PARTITIONS part_2,part_4 INTO PARTITION part_4;
SQL优化途径:选择合适的Oracle优化器、选择恰当的扫描方式、善于利用共享的SQL语句。
1、选择合适的优化器。CBO优化器:基于成本的优化器,这个成本是指CPU和内存占用率。
在编写SQL时,可以使用CBO对SQL进行优化从而获得更快的响应速度。
优化器使用的模式根据目标而定,CBO的优化模式有四种分别为:1、Rule:基于规则。2、Choose:默认,表或者索引有统计信息,走CBO模式,否则,走RBO模式。3、FirstRow:表中有统计信息时,以最快方式返回查询的前几行,总体减少