根据两个业务明细数据,根据当前月份生成合并的明细和汇总。当前月份根据当前时间取得,每日执行一次,每个月反复进行,直到当月结束,保留当月的最后一次数据作为历史存留。

涉及到的表:

(1)sf_chargemonth:业务明细数据,按月做分区,分区关键字chargemonth,每月数据100万。

(2)sf_ystzmonth:第二张业务明细数据,无分区。每月数据2万。

()RT_2109_suo_mx:合并的明细数据,无分区,合并后数据规模为每月100万。

(4)RT_2109_suo:合并的汇总数据,每月数据50条。

原来的执行过程共分三个步骤,执行时间近1小时:

(1)删除掉RT_2109_suo和RT_2109_suo_mx当月的数据。

Delete from RT_2109_suo

where chargemonth='201703';

Delete from RT_2109_suo_mx

where chargemonth=‘201703’;

(2)合并明细数据并添加到RT_2109_suo_mx。

Insert into

RT_2109_suo_mx(chargemonth,dept_id,housecode,field1)

Select ‘201703’,

dept_id,housecode,sum(field1)field1

(select

dept_id,housecode,field1 from sf_chargemonth where

substr(chargemonth,1,6)=’201703’

Union all

Select

dept_id,housecode,field1 from sf_ystzmonth where

substr(chargemonth,1,6)<=’201703’ and

cwmonth=’201703’

) a Group by

dept_id,housecode

(3)汇总RT_2109_suo_mx到RT_2109_suo。

Insert into

RT_2109_suo(chargemonth,dept_id,field1)

Select

‘201703’,dept_id,sum(field1) field1

From

RT_2109_suo_mx

Where

chargemonth=’201703’

Group by

dept_id;

1、RT_2109_suo_mx表结构的优化

该表每月固定生成,并且都是以月作为一个关键字,首先考虑的是给该表做分区。

CREATE TABLE

RT_2109_suo_mx2

PARTITION

BY list(CHARGEMONTH) (

PARTITIONp201703 values ('201703'),

PARTITIONp201704 values ('201704')

) as select *

from RT_2109_suo_mx;

droptable RT_2109_suo_mx;

altertable RT_2109_suo_mx2 rename to

RT_2109_suo_mx;

altertable RT_2109_suo_mx add primary key (CHARGEMONTH,

DEPT_ID,HOUSECODE);

2、RT_2109_suo_mx删除的优化

原来的删除语句为:Delete

from RT_2109_suo_mx where chargemonth=’201703’;

原来的删除只是利用了索引。表做分区后的分析效果如下:

加入分区以后,删除时用到了分区,加快了操作的速度。

但是,一个分区的数据量仍然是百万级的,直接进行delete仍然较慢,时间达到的半小时以上。

测试了几种办法:

(1)删除该分区,然后再添加该分区:alter

table RT_2109_suo_mx drop partitionp201703;

Alter table RT_2109_suo_mx

add partitionp201703 values(‘201703’)。删除的速度很快,但是,删除分区以后,表的索引失效。

(2)Truncate该分区:alter

table RT_2109_suo_mx truncate

partitionp20103;删除的速度很快,但是,表的索引失效。

(3)Truncate分区并更新索引:alter

table RT_2109_suo_mx truncate partitionp20103 update

indexes。删除的速度很快,索引也正常

3、合并明细数据语句的优化

这块主要是针对两个明细表的查询。

select

dept_id,housecode,field1 from sf_chargemonth where

substr(chargemonth,1,6)=’201703’。这个表是分区的,同时使用了substr,分区也没有利用上,索引也没有用上,把这个语句单独拿出来,查询的时间超过150秒。

修改为:select

dept_id,housecode,field1 from sf_chargemonth where chargemonth like

’201703%’。这就利用上了分区条件,把这个语句单独拿出来,查询的时间在1秒以内。

select

dept_id,housecode,field1 from sf_ystzmonth where

substr(chargemonth,1,6)<=’201703’ and

cwmonth=’201703’。这个语句,substr(chargemonth,1,6)肯定是没有利用上索引,cwmonth这个条件字段没有索引。前面的chargemonth这个条件,不太好修改。Cwmonth经过业务考虑,增加索引。

4、汇总语句的优化

这块还主要是针对查询语句的优化。

(1)原来的效率

Select

‘201703’,dept_id,sum(field1) field1

From

RT_2109_suo_mx

Where chargemonth=’201703’

and rttype=’25日报表’。这个条件在前面的描述中未加。SQL的分析效果如下,没有利用上分区,全表扫描,只利用了主键索引:

(2)修改为:Select

‘201703’,dept_id,sum(field1) field1

From

RT_2109_suo_mx

Where

chargemonth=’201703’。单分区扫描。

(3)指定分区:Select

‘201703’,dept_id,sum(field1) field1

From RT_2109_suo_mx

partition(p201703)

Where chargemonth=’201703’

and rttype=’25日报表’。

还是进行全表扫描,只利用了主键索引。

(4)考虑业务的上要求,目前rttype只有一个值,可以不考虑这个查询条件。索引优化为:

Select

‘201703’,dept_id,sum(field1) field1 From RT_2109_suo_mx

Where

chargemonth=’201703’;

Select

‘201703’,dept_id,sum(field1) field1 From

RT_2109_suo_mxpartition(p201703)

1、调整两个表的设置:

(1)RT_2109_suo_mx修改为按chargemonth做分区

(2)sf_ystzmonth增加索引cwmonth

2、执行过程还是三个步骤,执行时间不到5分钟:

(1)删除掉RT_2109_suo和RT_2109_suo_mx当月的数据。

Delete from RT_2109_suo

where chargemonth=’201703’;

alter table RT_2109_suo_mx

truncate partitionp20103 update indexes;

(2)合并明细数据并添加到RT_2109_suo_mx。

Insert into

RT_2109_suo_mx(chargemonth,dept_id,housecode,field1)

Select ‘201703’,

dept_id,housecode,sum(field1) field1

(select

dept_id,housecode,field1 from sf_chargemonth

wherechargemonthlike ’201703%’

Union all

Select

dept_id,housecode,field1 from sf_ystzmonth where

substr(chargemonth,1,6)<=’201703’ and

cwmonth=’201703’

) a Group by

dept_id,housecode

(3)汇总RT_2109_suo_mx到RT_2109_suo。

Insert into

RT_2109_suo(chargemonth,dept_id,field1)

Select

‘201703’,dept_id,sum(field1) field1

From

RT_2109_suo_mx

Where

chargemonth=’201703’

Group by

dept_id;

推荐阅读:

关帝灵签15签解签 关帝灵签第十五详解

不耻下问的意思

企业申请高新技术企业认定,高新技术产品(服务)是指对其发挥核

普鲁士国歌;“吾乃普鲁士人”的德文原版,还有英文版。来自维基

幼儿园大班谜语简单

四川已逝的老一辈革命家会活过来——四川人必看的这样的名单!!

oracle 过去5分钟,oracle程序性能优化实录-优化实例一(从1小时到5分钟)相关推荐

  1. oracle 中的trunc()函数及加一个月,一天,一小时,一分钟,一秒钟方法

    返回处理后的数据,不同于round()(对数值进行四舍五入处理),该函数不对指定小数前或后的数值部分进行舍入处理. 语法:trunc(number[,decimals]) 其中,number为待做处理 ...

  2. 程序性能的初步优化与分析(以 C++ 为例)

    去年圣诞节浏览了 Milo Yip 的文章"如何用 C 语言画一棵圣诞树" 后,对这个圣诞树生成算法很感兴趣: #include <math.h> #include & ...

  3. java多线程程序性能调优 优化过程

    我, 一多年c++开发,由于项目原因需要对一个性能底下的多线程java程序进行调优,百度google了几把,妈蛋,没有发现指导如何java线程调优的文章啊,都是一些java使用规范,我去,那我大jav ...

  4. 让oracle跑得更快——oracle 10g性能分析与优化思路,[让Oracle跑得更快.Oracle.10g性能分析与优化思路]概要1.doc...

    [让Oracle跑得更快.Oracle.10g性能分析与优化思路]概要1 在线事务(OLTP) 在线分析(OLAP) 在Oracle数据库中,凡是分配了存储空间的,都称为段,所有段并不一定指的是表,也 ...

  5. Oracle 性能调整与优化-程国华-专题视频课程

    Oracle 性能调整与优化-353人已学习 课程介绍         在本课程中,学员们将基于Oracle数据库掌握其性能调整的关键要素以及调整优化方法,包括从物理层面规划,系统层面参数设置,存储子 ...

  6. oracle 10g 速度慢,让Oracle跑得更快—Oracle 10g性能分析与优化思路_数据库教程

    资源名称:让Oracle跑得更快-Oracle 10g性能分析与优化思路 内容简介: 在这本书里读者将会学到作者在性能优化方面的一些思路和思考,一些故障处理的方法和原则,这些东西是作者在实践中长期积累 ...

  7. oracle tps 性能,Oracle性能究极优化 下

    正在看的ORACLE教程是:Oracle性能究极优化 下. 我们有理由相信采用新的内核版本(2.2.16-3 smp)也应该有性能的提升: OS2: Newer minor version kerne ...

  8. oracle hwm调整语法,Oracle 10g HWM原理及性能优化

    摘  要: HWM(High Water Mark)是表中已经使用过的存储空间与未使用过的存储空间之间的分界线,HWM对全表扫描的性能有非常大的影响.当全表扫描时,Oracle会读取HWM下所有的块, ...

  9. Oracle常用导出导出命令及性能效率对比

    说明 Oracle导入导出命令主要有EXPDP和IMPDP.EXP和IMP,区别如下:EXP和IMP是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用.EXPDP和IMPDP是服务端的工具程 ...

最新文章

  1. 《我想进大厂》之mysql夺命连环13问
  2. Linux不停往外发包
  3. display:none;与visibility:hidden;的区别
  4. 1011 A+B 和 C (15分)
  5. 重写laravel的request的校验器
  6. 美国远程MBA全面占领MBA市场
  7. windows7下bcdedit出现“拒绝访问”解决办法
  8. SQL2005学习(十六),SQL小知识点
  9. Query DSL(2)----Full text queries
  10. 2022官网下载jdk8教程
  11. 怎么把mp3转换成wav?
  12. VS C++项目报错warning C4199: ……use /Zc:twoPhase-
  13. Python3 利用阿里接口,根据银行卡号获取银行名称和logo
  14. 软考基础知识—操作系统
  15. 基于微信小程序的小说阅读系统(小程序+Nodejs)
  16. wxpython后台如何更新界面信息_wxpython后台线程更新界面控件方法
  17. VB.net byval和byref
  18. 使用adb 命令时提示“adb”既不是内部或外部命令,也不是可运行的程序
  19. 武汉大学计算机学院 论文,武大计算机学院教授分享:学术论文投稿与Rebuttal经验...
  20. IPv6和IPv4共存技术之 ISATAP隧道技术

热门文章

  1. php序列化(serialize)和反序列化(unserialize)函数
  2. python入门教程 - 滑块实战【附源码】
  3. html字体模糊怎么变清晰,电脑WIN7字体模糊怎么变清晰详细步骤
  4. Git系列五:分支、标签
  5. 2022年教师资格考试(高中历史学科知识)经典试题及答案
  6. 百度校招C++面试题
  7. 2层板天线50欧阻抗匹配
  8. 图片上绘制点阵汉字(C++)
  9. 它利用计算机技术 把企业的物流 人流,浅议财务ERP
  10. 云计算机和UI设计师哪个挣钱,ui设计师跟网络工程师哪个好