Oracle- 优化SQL(二)
Oracle- 优化SQL(二)
用戶反映在DISCOVER中的报表捞不出数据资料。
把SQL代码提取到ORACLE SQL Developer 环境运行并分析。 等待 1:52:53后出来数据。
分析执行计划,只有一个WIP.WIP_ENTITIES 表走FULL ACCESS , 其他表都是使用索引,开销在5000以内。
这是不可思异的效率。
我提出以下问题:
1、运行3年的报表(一直在20秒内完成),为什么会突然变慢呢?
2、DBA优化操作系统的IO配置影响?
3、DBA调整数据库的INDEX文件?做了 ANALYZE TABLE、REBUILD INDEX 等等相关操作?
4、IO资源不足?
5、临时表空间不足?
6、CPU资源被其他程序吃完,导致 SELECT的资源不足?
把问题抛给DBA去分析,第2~6问题 ,DBA回复都是不存在的。
然而DBA还是为这个报表 的SQL脚本所涉及的表做了一次ANALYZE TABLE操作,依然没有改善效率问题。
如: ANALYZE TABLE INV.MTL_SYSTEM_ITEMS_B COMPUTE STATISTICS FOR TABLE FOR ALL INDEXES;
第二天:
因为有3年的运行良好的效果,任谁都不会认为SQL脚本有优化的必要。
我回到SQL脚本上来,看到三级子查询中有个无效的右连接“ AND bom.bill_sequence_id=bc.bill_sequence_id(+)”
将它修改为“ AND bom.bill_sequence_id=bc.bill_sequence_id --(+)” ,同时增加 组织约束范围”BOM.ORGANIZATION_ID BETWEEN 426 AND 427“。
发现此子查询的表别名也与第一层表别名重复,故也修改了此处的表别名,如
1 | <strong>inv.mtl_system_items_b msi1 的</strong> |
MSI1改为“MSI4" ,既改善可阅读性,又提升效率。
1 2 3 4 5 6 7 8 9 10 11 12 13 | select bom.assembly_item_id, 'Y' result from inv.mtl_system_items_b msi4 , --apps.BOM_BILL_OF_MATERIALS bom, BOM.BOM_STRUCTURES_B BOM, BOM.BOM_COMPONENTS_B BC --apps.BOM_INVENTORY_COMPONENTS bic where BOM.ORGANIZATION_ID BETWEEN 426 AND 427 AND bom.bill_sequence_id=bc.bill_sequence_id <strong> --(+)</strong> and bc.component_item_id=msi4.inventory_item_id and bom.organization_id =msi4.organization_id and msi4.inventory_item_id in ( '145281' , '180670' , '148464' , '145286' , '151222' , '151220' , '151218' , '151216' , '145288' , '201642' , '202228' , '180680' , '371742' , '200951' , '151214' , '180682' , '305124' , '370364' , '148420' , '148307' ) and bom.ALTERNATE_BOM_DESIGNATOR is null |
通过 这么一翻修改,效率回复了20秒内。
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】Flutter适配HarmonyOS 5知识地图,实战解析+高频避坑指南
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合终身会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 聊一聊 Linux 上对函数进行 hook 的两种方式
· C# 锁机制全景与高效实践:从 Monitor 到 .NET 9 全新 Lock
· 一则复杂 SQL 改写后有感
· golang中写个字符串遍历谁不会?且看我如何提升 50 倍
· C# 代码如何影响 CPU 缓存速度?
· 提升Avalonia UI质感,跨平台图标库选型实践
· 突发,CSDN 崩了!程序员们开始慌了?
· C# 中委托和事件的深度剖析与应用场景
· 一个基于 .NET 8 + Ant Design Blazor 开发的简洁现代后台管理框架
· AppBox拖拽设计增删改查用户界面