专业编程教程与实战项目分享平台

网站首页 > 技术文章 正文

sql调优-oracle oracle sql优化一般从那几个方面入手

ins518 2024-10-26 12:13:57 技术文章 8 ℃ 0 评论

UNE_XXX这个表访问了两次,是性能的主要障碍,需要想办法,让访问次数变为1次。业务场景是,首先取fversion的最大值,以这个最大值为条件,再取原表的数据。

原语句:

SELECT *

FROM UNE_XXX

WHERE frgnCode = '50101'

AND fagenIdCode = '497a4557acc4b1a8a5cbd984f19aaab'

AND fversion in (SELECT MAX(fversion)

FROM UNE_XXX

WHERE frgnCode = '50101'

AND fagenIdCode = '497a4557acc4b1a8a5cbd984f19aaab');

分析:访问了两次原表,产生15个一致读




优化后:

这种写法想要性能好,有个前提,就是经过t.fagenIdCode,t.frgnCode过滤后,数据量要变的比较小才好,因为max(fversion)over 需要涉及到排序,大量数据的排序,性能不会好的,这种写法只访问一次UNE_XXX,效率可以提高一倍左右。

select * from (

select t.*,max(fversion)over (partition by frgnCode,fagenIdCode) as fversion_max from UNE_XXX t WHERE t.frgnCode = '50101'

AND t.fagenIdCode = '497a4557acc4b1a8a5cbd984f19aaab') where fversion_max=fversion;

分析:访问了一次原表,产生7个一致读,减少了一般一致读



Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表