如何使用Hash分区优化Oracle分析函数

数据库 Oracle
本章就如何使用Hash分区优化Oracle分析函数作简单描述,知识点包括了:创建一个分区表和普通表,表结构与DBA_OBJECTS一致,从dba_object中把数据插入到两个表等。

原理:数据表的hash分区字段与分析函数中的partition by 字段一致的时候,每个分区上的数据可以单独进行运算,互不干涉。所以可以很快的提高Oracle分析函数的运行效率。具体测试步骤如下:

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

  1. create table t_partition_hash(  
  2. object_name varchar2(128),  
  3. subobject_name varchar2(30),  
  4. object_id number,  
  5. data_object_id number,  
  6. object_type varchar2(19),  
  7. created date,  
  8. last_ddl_time date,  
  9. timestamp varchar2(19),  
  10. status varchar2(7),  
  11. temporary varchar2(1),  
  12. generated varchar2(1),  
  13. secondary varchar2(1)  
  14. )  
  15. partition by hash(object_type)(  
  16. partition t_hash_p1 tablespace USERS,  
  17. partition t_hash_p2 tablespace USERS,  
  18. partition t_hash_p3 tablespace USERS,  
  19. partition t_hash_p4 tablespace USERS,  
  20. partition t_hash_p5 tablespace USERS,  
  21. partition t_hash_p6 tablespace USERS,  
  22. partition t_hash_p7 tablespace USERS,  
  23. partition t_hash_p8 tablespace USERS  
  24. );  
  25. create table t_big_hash(  
  26. object_name varchar2(128),  
  27. subobject_name varchar2(30),  
  28. object_id number,  
  29. data_object_id number,  
  30. object_type varchar2(19),  
  31. created date,  
  32. last_ddl_time date,  
  33. timestamp varchar2(19),  
  34. status varchar2(7),  
  35. temporary varchar2(1),  
  36. generated varchar2(1),  
  37. secondary varchar2(1)  
  38. );  
  39.  

#p#

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

  1. insert into t_partition_hash select * from dba_objects;  
  2. insert into t_partition_hash select * from dba_objects;  
  3.  

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

  1. begin  
  2. insert into t_rank  
  3. select object_id,  
  4. rank() over (partition by object_type order by object_id) r_object_id,  
  5. rank() over (partition by object_type order by subobject_name) r_subobject_name ,  
  6. rank() over (partition by object_type order by created) r_created,  
  7. rank() over (partition by object_type order by last_ddl_time) r_last_ddl_time ,  
  8. rank() over (partition by object_type order by status) r_object_type  
  9. from t_partition_hash;  
  10. end;  
  11.  

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

  1. begin  
  2. insert into t_rank  
  3. select object_id,  
  4. rank() over (partition by object_type order by object_id) r_object_id,  
  5. rank() over (partition by object_type order by subobject_name) r_subobject_name ,  
  6. rank() over (partition by object_type order by created) r_created,  
  7. rank() over (partition by object_type order by last_ddl_time) r_last_ddl_time ,  
  8. rank() over (partition by object_type order by status) r_object_type  
  9. from t_big_table;  
  10. end;  
  11.  

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

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

善用Oracle表空间设计提升数据库性能

优化数据库大幅度提高Oracle分析函数的性能

Oracle设置系统参数进行性能优化
 

【编辑推荐】

  1. 修改Oracle存储过程所需代码
  2. 对Oracle存储过程的总结
  3. 实现Oracle存储过程的实际应用的代码 
  4. 深入高性能的Oracle动态SQL开发 
  5. Oracle SQL的优化规则解析 
责任编辑:佚名 来源: 陈氏网
相关推荐

2009-05-19 14:34:52

Oraclehash优化

2022-09-11 15:12:04

MySQL数据库优化器

2017-03-09 13:11:48

Oracle分析函数

2009-06-03 10:32:36

Oracle性能优化分区技术

2009-11-16 13:59:22

Oracle优化

2017-07-19 09:53:42

Oracle分区问题

2021-01-20 08:07:52

oracle分区单表

2017-05-08 17:40:23

Oracle视图优化案例分析

2019-04-24 18:00:57

Linuxsgdisk命令管理分区

2010-10-28 15:38:24

Oracle to_d

2010-10-25 17:08:34

oracle聚合函数

2010-04-01 10:55:48

Oracle 数据类型

2009-03-04 09:06:56

优化sqlOracle

2010-04-27 18:18:55

AIX微分区

2009-11-16 17:03:20

Oracle优化CPU

2010-10-25 11:02:47

Oracle to_c

2010-10-25 13:33:10

Oracle over

2023-03-31 17:33:06

Oracle数据库

2010-04-26 14:32:21

Oracle SQL

2010-04-12 10:53:07

Oracle SQL
点赞
收藏

51CTO技术栈公众号