Oracle使用hash分区优化分析函数查询

php中文网
发布: 2016-06-07 16:54:22
原创
1169人浏览过

在Oracle中的分析函数都是基于某几个字段划分计算窗口,然后在窗口内进行聚合,排名,等等计算。我想如果我们数据表的hash分区字

在Oracle中的分析函数都是基于某几个字段划分计算窗口,然后在窗口内进行聚合,排名,等等计算。我想如果我们数据表的hash分区字段与分析函数中的partition by 字段一致的时候,应该可以大大加快分析函数的运行效率。因为每个分区上的数据可以单独进行运算。互不干涉,下面试验来验证我的想法.

第一步:创建一个分区表和普通表,表结构与DBA_OBJECTS一致:

create table t_partition_hash(

object_name varchar2(128),

subobject_name varchar2(30),

object_id number,

data_object_id number,

object_type varchar2(19),

created date,

last_ddl_time date,

timestamp varchar2(19),

status varchar2(7),

temporary varchar2(1),

generated varchar2(1),

secondary varchar2(1)

)

partition by hash(object_type)(

partition t_hash_p1 tablespace USERS,

partition t_hash_p2 tablespace USERS,

partition t_hash_p3 tablespace USERS,

partition t_hash_p4 tablespace USERS,

partition t_hash_p5 tablespace USERS,

partition t_hash_p6 tablespace USERS,

partition t_hash_p7 tablespace USERS,

partition t_hash_p8 tablespace USERS

);

create table t_big_hash(

object_name varchar2(128),

subobject_name varchar2(30),

object_id number,

data_object_id number,

object_type varchar2(19),

created date,

last_ddl_time date,

timestamp varchar2(19),

status varchar2(7),

temporary varchar2(1),

generated varchar2(1),

secondary varchar2(1)

);

第二步:准备数据,从dba_object中把数据插入到两个表。总共插入数据1610880。

insert into t_partition_hash select * from dba_objects;

insert into t_partition_hash select * from dba_objects;

第三步:本采用RANK函数对两个表进行查询。

begin

insert into  t_rank

select object_id,

rank() over (partition by object_type order by object_id)  r_object_id,

rank() over (partition by object_type order by subobject_name) r_subobject_name ,

rank() over (partition by object_type order by created) r_created,

rank() over (partition by object_type order by last_ddl_time) r_last_ddl_time ,

rank() over (partition by object_type order by status) r_object_type

from t_partition_hash;

end;

使用hash分区表总共执行5次的运行时间分别为:46.156s,33.39s,40.516s 34.875s 38.938s.

begin

insert into  t_rank

select object_id,

rank() over (partition by object_type order by object_id)  r_object_id,

rank() over (partition by object_type order by subobject_name) r_subobject_name ,

rank() over (partition by object_type order by created) r_created,

rank() over (partition by object_type order by last_ddl_time) r_last_ddl_time ,

rank() over (partition by object_type order by status) r_object_type

from t_big_table;

end;

使用非分区表执行5次的执行时间分别为:141.954s,89.656s,77.906s,,98.5s,75.906s.

由此可见采用有效的HASH分区表可以有效提升分析函数在oracle中的执行效率。我相信随着数据量的增加,将会有更明显的效果,回头再测试一个项目中遇到的类似问题。

linux

相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号