前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >73-找到业务高峰时段的sql示例(报表开发类)

73-找到业务高峰时段的sql示例(报表开发类)

作者头像
老虎刘
发布2022-06-22 18:22:21
3870
发布2022-06-22 18:22:21
举报
文章被收录于专栏:老虎刘谈oracle性能优化

有人在技术讨论群里提出下面一个业务逻辑代码段:

这段代码的业务逻辑是找到2019年业务量最多的61秒(我想本意应该是60秒,代码不够严谨)间隔及业务量。

这个业务题主用plsql完成,是比较典型的程序员思维,执行效率明显是非常低的,我给出的建议是可以直接按to_char(date_created,'yyyymmdd hh24mi')做group by,再找出最大值,sql写法比较简单,相信大部分开发人员应该都能够简单写出。

但是题主又补充了其他需求,说还可能需要按不同的时间间隔做统计,比如15秒间隔,30秒间隔等。

针对这种需求,我给出的SQL写法如下(以15秒间隔为例):

题主对两种写法做了性能对比,1000多万记录,我提供的写法耗时125秒,原plsql写法耗时1371秒(这个速度是无法接受的),效率相差10几倍,如果数据量再大,效率差别也会更大,而且优化后的sql还可以使用并行,还能提速。

上面的查询,间隔的起点是固定的,这种写法还不是太复杂。如果我们再把这个问题延伸一下,比如查一年内哪个连续10天的业务量最高,sql相对就复杂一些,下面是我给出的写法:

上面是一些使用分析函数的两个小案例,大家可以参考一下。同时,使用with的CTE写法会让sql的层次比较清晰,增强代码的可读性。

如果你有更好的写法,不妨在留言写出来,让大家一起学习一下。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 老虎刘谈oracle性能优化 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档