设为首页 加入收藏

TOP

数据库设计及优化(二)
2015-07-24 11:14:12 来源: 作者: 【 】 浏览:4
Tags:数据库 设计 优化
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:表中有统计信息时,以最快方式返回查询的前几行,总体减少

首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇【翻译自mos文章】使用asm来部署.. 下一篇数据库启动

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·python数据分析岗的 (2025-12-25 10:02:21)
·python做数据分析需 (2025-12-25 10:02:19)
·成为一个优秀的pytho (2025-12-25 10:02:16)
·Java后端面试实习自 (2025-12-25 09:24:21)
·Java LTS版本有哪些 (2025-12-25 09:24:18)