首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | HR | 镜像
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
搜索中心 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>linux数据库>其他>正文

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

http://www.oklinux.cn  2009-05-21  it168    会员收藏  游客收藏  【 】 
您查看的文章来源于http://www.oklinux.cn

在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服务器安全策略详解:Web服务器的安全策略   下一篇:Fedora 11 Final发布延后跳票一周

收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·善用Oracle表空间设计提升数据库性能
·MySQL For Linux安装日志
·MySQL创始人建立Open Database Alliance
·Oracle数据库中的字符处理技巧总结
·Oracle备份功能比较
·Oracle 下导入txt的shell脚本以及配置
·Linux Ext3下删除MySQL数据库的数据恢复案例
·Linux:Apache_MySQL随机启动关闭
·三招助你做好Oracle数据库备份测试
·在 Linux x86 上安装 Oracle 数据库 10g(官方文档)
·MySQL 安装和基本命令
·JDBC数据库驱动程序种类及选择
·浅谈Oracle中的物化视图
·Sun的消失和Oracle的猜想
·MySQL的my.cnf 文件里的配置项解释
·Oracle SQL基础知识
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·善用Oracle表空间设计提升数据库性能
·MySQL For Linux安装日志
·MySQL创始人建立Open Database Allianc
·Oracle数据库中的字符处理技巧总结
·Oracle备份功能比较
·Oracle 下导入txt的shell脚本以及配置
·Linux Ext3下删除MySQL数据库的数据恢
·Linux:Apache_MySQL随机启动关闭
·三招助你做好Oracle数据库备份测试
·在 Linux x86 上安装 Oracle 数据库 10
·MySQL 安装和基本命令
·JDBC数据库驱动程序种类及选择
  阅读排行
·Linux下安装Oracle数据库完整笔记
·Oracle建表过程初学
·MySQL导入导出.sql文件步骤
·Oracle 建立临时表语法及使用技巧
·Linux平台下启动oracle 11g EM控制台
·RHEL5.1 下安装Oracle 10.2.0.1及常见
·Linux平台下配置MySQL主从复制
·Mysql JDBC驱动版本与Mysql版本的对应
·Linux系统下启动MySQL的命令及相关知识
·关于MySQL事务处理学习
·Linux操作系统下MySQL的卸载、安装全过
·Oracle10g RAC for Linux配置全过程
·手工配置Oracle 10G Enterprise Manage
·Linux系统中Oracle数据库的用户权限
·向MySQL插入数据乱码解决办法
网摘收藏: