oracle使用max提升效率,Oracle调优之利用max与leftjoin来进行不同表之间匹配

需求

有两个不同的表,A表是基础数据,B表根据A表的某个不重复关键字加其他一些条件查询出一条或几条数据,取其中一条数据。并且利用此数据某个关键字再在B表中查询下一层级数据,最终将A表的对应一条数据,B表查询出的两条数据拼成一条数据返回。

由于这个联合查询的结果用的频次与量都很大,所以做成了view,一开始是使用function来控制leftjoin条件筛选数据与匹配。但是若是把function作为条件,整个sql语句的查询效率很差,在每次执行查询都需要3s左右。对系统的运行速度与稳定行都产生了一定的影响。

解决方案

在优化中考虑的就是去除sql中的function,但是在function中可以很方便的进行判断与错误处理,可以避免由于数据问题导致整个view无法使用。将function改成sql就要考虑到数据多或少的情况下如何保证准确性。由于业务要求可以满足,所以最终的sql中A表只执行匹配0条或者1条B表中的数据。

最终代码如下

CREATE OR REPLACE VIEW ERP_MPS_PROCESS AS

SELECT distinct *

FROM SAP_ITEM_DIE T              --A表

left join (select h.parent_code,

max(h.component_code) as component_code,

h.werks,

h.stktx

from ERP_BOM h      --B表

left join erp_product_details j

on h.component_code = j.item_code

and h.werks = j.dept_code

where j.material_type = 'Z350'

group by h.parent_code, h.werks, h.stktx) k

on k.parent_code = T.MTNR1

and k.stktx = t.equnr

left join (select m.parent_code, max(m.component_code) as refcode

from ERP_BOM m     --B表第二次取值

left join erp_product_details n

on m.component_code = n.item_code

and m.werks = n.dept_code

where n.material_type = 'Z300'

group by m.parent_code) o

on o.parent_code = k.component_code

;

利用max函数保证取出的数据不超过一条,再利用对应条件与left join替代function的功能。

结果

在使用了替代方案后,整体查询时间在0.1s到0.2s中,相对于原本3s有了很大的提升,当然,此方法仍有优化的空间,哪位有更好的方法也请不吝赐教。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/291144.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开放产品开发(OPD):Archi 汉化工具下载

在OPD中,我们使用了ArchiMate 作为架构语言,这是一个高层、简单的描述语言,之前我也写过一系列相关的文字,架构语言ArchiMate - 开篇:企业架构语言ArchiMate介绍架构语言ArchiMate - 语言结构&a…

【数据库中间件】MyCat分表分库规则实现

2019独角兽企业重金招聘Python工程师标准>>> /*** * 先根据截取字段的日期分组,再根据字段值数据按天入表 * author Fx_demon * */ public class PartitionBySubstringRangeDateDay extends AbstractPartitionAlgorithm implements RuleAlgo…

Redis: Useful commands

SELECT X - Select database (the X must be int) CONFIG GET databases - Get databases numberINFO keyspace - List Databases info LUSHDB - Removes data from your connections CURRENT database. FLUSHALL - Removes data from ALL databases.查看数据…

svn之check out没有下载so文件原因和解决办法

1、问题 linux 环境 svn checkout 发现少了so文件 2、解决办法 然后去看出我在windows上面svn checkout下来的项目,发现有so文件,然后再去查看,我把这个项目svn commit到另外一个svn路径的时候有没有提交so文件,结果发现真的没…

[C# 项目实战]: 制作一个备忘录(经典)

01—概述前几天群里有人问如何制作备忘录,感觉这样一个小实例挺适合新手们入门学习使用,所以就抽空做了出来。界面如下图:这个备忘录主要包括了如下功能:① 备忘录信息的增、删、改、查;② 备忘录时间到了以后进行语音…

RedHat 5.4下构建postfix全功能电子邮(七)-extmail extman平台-(下集)

2019独角兽企业重金招聘Python工程师标准>>> RedHat 5.4下构建postfix全功能电子邮(七)-extmail extman平台-(下集) 三、设置邮件系统的图形化日志信息 [rootmail ~]# ln -sf /usr/local/apache2/htdocs/extman/addon…

Android之moveTaskToBack()方法实现手动隐藏当前Activity

1、moveTaskToBack()方法说明 moveTaskToBack()方法:在activity中调用 moveTaskToBack (booleannonRoot)方法即可将activity 退到后台,注意不是finish()退出,按下返回键是退出 参数说明: 参数为false——代表只有当前activity是t…

JNI中的内存管理(转)

源:JNI中的内存管理 JNI 编程简介 JNI,Java Native Interface,是 native code 的编程接口。JNI 使 Java 代码程序可以与 native code 交互——在 Java 程序中调用 native code;在 native code 中嵌入 Java 虚拟机调用 Java 的代码…

C# 异步方法的异常处理

在使用异步方法时,应该知道错误的一些特殊处理方式。所有 ErrorHandling 示例的代码都使用了如下名称空间:SystemSystem.Threading.Tasks从一个简单的方法开始,它在延迟后抛出一个异常:static async Task ThrowAfter(int ms, stri…

oracle 创建日志文件,oracle创建日志文件

一团网资讯一团资讯 > oracle > oracle创建日志文件oracle创建日志文件2018-04-14 15:39:48 发布者:来源网络创建日志文件的语法如下:alter database database_name add logfile[group group_number](file_name[,file_name[,...]])[SIZE numbe…

Mark Down 使用实例

为什么80%的码农都做不了架构师?>>> Mark Down 使用实例 MarkDown是一个非常轻量级的 【标记语言】,有点有很多,书写比较快速,学习成本低,统一的排版模式,可导出 PDF HTML 等文档格式&#xff…

Android之在后台不显示activity方法

1、设置excludeFromRecents Androidmanifest.xml,设置Activity的属性:Android:excludeFromRecents"true"true时不显示;false默认显示。 2、start activity intent flag startactivity的时候用intent flag:FLAG_ACTIVITY_EXCLUDE_FR…

教育管理系统——android家长客户端

最近做了一个android的小项目,服务器端已经搭建好了,使用了spring MVC作为后端技术,发布了一系列web接口来接受客户端提交的数据和返回客户端请求的数据,web端使用了ext js来作为前端技术。同时还需要一个android客户端和ios客户端…

JoySSL付费版证书的优势

JoySSL付费版证书相比免费版有很多优势。首先,付费版证书通常由权威的CA(证书颁发机构)签发,在浏览器和操作系统中具有99.99%的兼容性,被主流浏览器如Chrome、Firefox、Safari和Edge等广泛支持和认可。这确保了无论用户…

Git命令集十三——快照操作

2019独角兽企业重金招聘Python工程师标准>>> Git命令集十三——快照操作 Git工具中提供了一个stash命令,这个命令的作用是创建快照。快照主要的用途是将当前未更新到缓存区的修改进行入栈保存,创建快照后,Git的状态会变回上一次提…

Asp.net core IdentityServer4与传统基于角色的权限系统的集成

img写在前面因为最近在忙别的,好久没水文了 今天来水一篇;在学习或者做权限系统技术选型的过程中,经常有朋友有这样的疑问 :“IdentityServer4的能不能做到与传统基于角色的权限系统集成呢?”“我的公司有几百个接口&a…

oracle 快捷 企业,Oracle自治数据库提供APEX 20.1,助企业快速构建应用

Oracle自治数据库(Oracle Autonomous Database)现已提供Oracle APEX 20.1,Oracle Application Express(APEX)是一个低代码应用开发平台,随附在所有Oracle数据库当中,企业也可以通过所有Oracle数据库云服务来使用,包括Oracle自治数…

【转】CSS样式覆盖规则

大家都知道CSS的全称叫做“层叠样式表”,但估计很多人都不知道“层叠”二字的含义。其实,“层叠”指的就是样式的覆盖,当一个元素被运用上多种样式,并且出现重名的样式属性时,浏览器必须从中选择一个属性值&#xff0c…

C之memset、memcpy、strcpy、strncpy区别

1 memset memset 用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘ ’或‘\0’, memset可以方便的清空一个结构类型的变量或数组。 char a[100]; memset(a, \0, sizeof(a)); struct student {char name[16];int age; }; struct student s…

Cachefiled

NFS不同共享客户端间的数据不同步 问题现象 当您用台ECS挂载同一个NFS文件系统,在ECS-A上append写文件,在ECS-B用tail -f观察文件内容的变化。在ECS-A写完之后,在ECS-B看到文件内容变化会有10-30秒的延时。然而相同的场景下,如果直…