oracle over partition开窗函数_rownumber和rank区别

oracle over partition开窗函数_rownumber和rank区别小至尖尖优化案例帮朋友优化一条很简单的窗口函数 ROW_NUMBER() OVER() , Oracle 迁移 KingBase 项目。原始SQL和执行计划STUDENT_BAK 表我模拟的数据,3千万行数据。Oracle 执行计划KingBase 执行计划O

小至尖尖优化案例   帮朋友优化一条很简单的窗口函数 ROW_NUMBER() OVER() , Oracle 迁移 KingBase 项目。 原始SQL和执行计划   STUDENT_BAK 表我模拟的数据,3千万行数据。   Oracle 执行计划   KingBase 执行计划   Oracle:28秒出结果,KES:80秒出结果,两者执行时间差距很大。 优化方案一、使用分区表   将 STUDENT_BAK 表的 STU_CLASSID 列作为 LIST 分区   Oracle 使用分区表优化后执行计划:   KingBase 使用分区表优化后执行计划:   Oracle:33秒出结果,KES:63秒出结果。   Oracle使用分区表后反而比原来的单表慢了5秒,但是KES使用分区表以后比原来快了17秒(效果不错)。 优化方案二、分区表的基础上使用并行   Oracle 语句添加 HINT parallel(8) 执行计划   KingBase 语句添加 HINT parallel(8 sb hard) 执行计划   Oracle:2.8秒出结果,KES:61秒出结果。   Oracle使用并行以后提升巨大、KES 感觉并行感觉没有对row_number进行很好的优化,和原来分区表执行时间差别不大:61s。 优化方案三、ROW_NUMBER() OVER() 等价改写   在原来分区表、8个并行的基础上等价改写 ROW_NUMBER() OVER() 逻辑   等价改写SQL不放出来,看到这里有想要继续深入学习的读者可以联系我,毕竟我也想了一会才想到实现的方法,纯逻辑转换题。   Oracle 等价改写ROW_NUMBER() OVER() 计划   KingBase 等价改写ROW_NUMBER() OVER() 计划   Oracle:0.69秒出结果,KES:32秒出结果。   Oracle执行速度感觉打了鸡血一样,太猛了,KES改写以后也能从61秒降低到32秒跑出结果   目前只能将KES的 ROW_NUMBER() OVER() 执行速度优化到32秒,后续再想想有没有更快的优化方案。   结束语   上面 ROW_NUMBER() OVER() 的三种优化手段,如果在项目上有遇到类似的案例,先要搞清楚环境需求,再选择采用哪种优化手段。   如果读者有更好的优化思路,欢迎一起交流,进步。

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/60917.html

(0)
上一篇 2024年 8月 29日
下一篇 2024年 8月 29日

相关推荐

关注微信