1、某客户业务模块大in导致慢SQL:
2.从现场获取到慢SQL信息:1)表数据量不大,只有几十万2)表更新较为频繁,从另外系统同步过来,实际上变更并不频繁,只有少量的updates
3.AWR报告无明显异常:
4.业务逻辑分析:1)原始SQL:SELECT A.FId "id", A.fnumber "number", A.fctrlstrategy "ctrlStrategy", A.fmasterid "masterid", A.fstatus "status", A.fcreateorgid "createOrg.id"FROM xx_Material A WHERE A.FId IN (SELECT COLUMN_VALUE FROM UDT_INTTABLE(?)) AND (A.fbitindex IN (SELECT COLUMN_VALUE FROM UDT_INTTABLE(?)) OR (A.fcreateorgid = ? AND A.fctrlstrategy = ? OR A.fstatus = ? AND A.fctrlstrategy = ?) OR A.fctrlstrategy = ? AND (A.fcreateorgid = ? OR A.fstatus = ? AND A.fcreateorgid=100000))
2)SQL分析UDT_INTTABLE是一个自定义类型,用于封装大in,规避Oracle in超过1000报错问题,涉及代码:
CREATE OR REPLACE TYPE "UDT_INTTABLE" AS TABLE OF number(19)使用IN (SELECT COLUMN_VALUE FROM UDT_INTTABLE(?)) 将大量in封装后,整个执行计划为FTS(未截图)
5.执行计划分析:由于FID是主键,整个表几十W记录,而in只有上千个,从COST成本预估分析,正确的执行计划应该使用in..list(iterator) NL ,类似如下:
optimizer预计计算有误,执行计划FTS有问题
5.优化方案:1)考虑使用table函数代替子查询(
SELECT COLUMN_VALUE FROM UDT_INTTABLE(?))改写,如:
select * from t_big where id in (select * from table(UDT_INTTABLE(1,2,3,4,5,6,7,8,9,10,100))),执行计划如上。
2)将in转换为临时表(依赖程序框架实现),in list iterator转换为NL JOIN
Oracle大in慢查询优化
来源:这里教程网
时间:2026-03-03 22:41:06
作者:
编辑推荐:
- Oracle大in慢查询优化03-03
- 苹果TF签名全称TestFlight签名,需要怎么做才可以上架呢?03-03
- 防止应用调试分析IP被扫描加固实战教程03-03
- 从 Oracle 到 TiDB,通过ETL工具,高效实现数据拉通03-03
- Oracle体系结构-Redo Log Buffer详解03-03
- Oracle体系结构-PMON详解03-03
- 集群损坏,如何抢救抽取数据?03-03
- 开发源码搭建一码双端应用分发平台教程:逐步分析注意事项03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- Oracle大in慢查询优化
Oracle大in慢查询优化
26-03-03 - 从 Oracle 到 TiDB,通过ETL工具,高效实现数据拉通
从 Oracle 到 TiDB,通过ETL工具,高效实现数据拉通
26-03-03 - 从性价比到价值感:二手电商重塑消费心智
从性价比到价值感:二手电商重塑消费心智
26-03-03 - 麦当劳招退休人员:00后太小,60后正好?
麦当劳招退休人员:00后太小,60后正好?
26-03-03 - 一场由“消失的进程”引发的追踪:数据库备份异常背后的暗战
一场由“消失的进程”引发的追踪:数据库备份异常背后的暗战
26-03-03 - Oracle DataGuard 搭建关键参数详解
Oracle DataGuard 搭建关键参数详解
26-03-03 - 重新认识Keep:港股AI应用板块的“启明星”
重新认识Keep:港股AI应用板块的“启明星”
26-03-03 - 基数反馈机制引起的执行计划错误
基数反馈机制引起的执行计划错误
26-03-03 - 上半年交付暴增超去年全年,禾赛如何交出这份超预期财报?
上半年交付暴增超去年全年,禾赛如何交出这份超预期财报?
26-03-03 - 上半年营收3630万美元的康迪科技,凭什么股价大涨?
上半年营收3630万美元的康迪科技,凭什么股价大涨?
26-03-03
