需求

有两个不同的表,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有了很大的提升,当然,此方法仍有优化的空间,哪位有更好的方法也请不吝赐教。

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

  1. 在RedHat Enterprise Linux 上Oracle 9i的安装配置与调优

    1 安装配置Oracle 9i数据库 本章描述内容如下所示: 1.1 安装前的准备工作 介绍在安装Oracle之前所需的准备工作. 1.2安装前的系统设置 介绍在安装Oracle之前所必须的系统设置. ...

  2. oracle正确使用索引,通过案例学调优之--Oracle中null使用索引

    通过案例学调优之--Oracle中null使用索引 默认情况下,Oracle数据库,null在Index上是不被存储的,当在索引列以"is null"的方式访问时,无法使用索引:本 ...

  3. oracle dbms_profiler,Oracle数据库中使用DBMS_PROFILER进行调优

    在进行数据库调优时,代码的性能瓶颈至关重要,Oracle数据库提供的DBMS_PROFILER包可以特别方便的发现瓶颈的所在之处. DBMS_PROFILER在使用之前可能需要安装,具体安装步骤如下: ...

  4. mysql5.7性能提升一百倍调优宝典

    全文中一共有常用的(事实上你如果花1-2周阅读.理解.自己动手设一下后是需要这么多参数的)76个参数,笔者把近10年里3个亿万级项目的数据库调优用此篇浓缩到了可能读者只需要2周时间就可以掌握,同时我是 ...

  5. mysql5.7性能提升一百倍调优

    全文中一共有常用的(事实上你如果花1-2周阅读.理解.自己动手设一下后是需要这么多参数的)76个参数,笔者把近10年里3个亿万级项目的数据库调优用此篇浓缩到了可能读者只需要2周时间就可以掌握,同时我是 ...

  6. mysql5.7性能提升一百倍调优宝典(赠给有缘人)

    前言:全文中一共有常用的(事实上你如果花1-2周阅读.理解.自己动手设一下后是需要这么多参数的)76个参数,笔者把近10年里3个亿万级项目的数据库调优用此篇浓缩到了可能读者只需要2周时间就可以掌握,同 ...

  7. oracle dbms_workload_repository,Oracle10g dbms_workload_repository使用-性能调优-Oracle频道-中国IT实验室...

    在10g以前的使用的是 Statspack做性能故障诊断的. Database 10g 提供了一个显著改进的工具:自动工作负载信息库 (AWR).AWR 和数据库一起安装.数据库装好后,,快照由一个称 ...

  8. oracle 跨分区查询效率,Oracle分区表做跨分区查询

    问:有一张大表,其中按时间字段(TIME_ID)进行表分区(按季度分区),但是如果业务人员做跨季度的大批量数据的查询时,未能走TIME_ID分区索引,导致全表扫描.此种情况该如何处理? 示例解析: 1 ...

  9. oracle联合主键效率,Oracle主键与复合主键的性能分析

    总结: 1.主键和复合主键,查询性能相同(索引高度相同,恰当的运用索引). 2.主键和复合主键,(update,insert)性能不同(因为复合主键会用更多的块来创建索引,所以update,inser ...

最新文章

  1. Python 第三方库 cp27、cp35 等文件名的含义
  2. java对Oracle数据库查询_java 连接Oracle数据库 查询
  3. 【Android】Theme.AppCompat.Light 问题
  4. win7链接html线到屏幕上,为你解决win7系统html文件图标变成空白的具体技巧 - win7吧...
  5. Linux服务器SMB服务挂载目录
  6. java g.drawline_菜鸟求教:关于Graphics g中的g.drawLine问题
  7. java sybase数据库连接_在JAVA中连接Sybase数据库(例子)
  8. UG工程图模板创建步骤
  9. 各省农村人均受教育年限及村委会个数(2011-2019年)
  10. 【信息技术】【2014】【含源码】PGP加密软件
  11. LeetCode——75. 颜色分类(面试题)
  12. MarkText常用快捷键
  13. 为cfree5 配置舒心的编译环境
  14. python读csv文件中文乱码问题简单解决(附python遍历目录下csv文件并输出内容的代码)
  15. 怎么在手机上取消双重认证_谁知道苹果手机双重认证怎么弄?手机号都不知道谁的?...
  16. Kepware通过网络配置三菱FX5U型号PLC的方法
  17. JS中的CommonJS和AMD
  18. 《Primes is in P》学习笔记
  19. 计算机硬技术与基础在线测试,计算机硬件技术基础网上作业及答案
  20. linux内核snat分析,Linux2.6.29.6内核netfilter代码中SNAT的过程跟踪

热门文章

  1. UEFI + GPT 启动 VHD
  2. 还有多少人不会用K8s?.NET高级高薪岗,开始要求了!
  3. Autofac的切面编程实现
  4. Beetlex之redis驱动
  5. VS, VS Code, VS Online, VS xxx, 你都分清了吗?
  6. .NET Core 小程序开发零基础系列(1)——开发者启用并牵手成功
  7. 基于 Kong 和 Kubernetes 的 WebApi 多版本解决方案
  8. 【招聘(北京)】北森测评招聘 .NET 架构师、高级工程师
  9. Abp + Grpc 如何实现用户会话状态传递
  10. .NET Core 2.1 Preview 2发布 - April 10, 2018