暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 动态查询在12C下运行缓慢

askTom 2016-11-17
260

问题描述

嗨,汤姆,
我有1个sql文件,它在10G中运行非常好,但迁移到12c后性能非常差。
查询逻辑为:
一个表格大约有550列,数据将从XL工作表插入到这个表格中。加载后,我们需要检查:
第一个,哪个列具有值(忽略10-15列,我们将参考这些列).
如果值存在,则标识那些以后可以使用的列。

例如,下面的查询在10G中运行良好,但在12C中运行很差。

光标C_MATER_CLAIM IS
选择a.OWER || '。' || A. TABLE_NAME、a.Column_Name
从所有标签列a
其中A.所有者= v_所有者
AND a.table_name IN (v_)_clm_tbl
AND a.hidden_tre ='否'
AND user_gened ='是'
AND A.列名称不在
(参考栏) ;
开始

v_主要名称: := v_拥有者: || '。' || v_主要名称: v_主要名称: clm_tbl ;

打开C_MATER_CLAIM ;
循环
取回C_MATER_CLAIM批量收集
进入V_MATER_CLAIM限制1000 ;
我在1。V_MATER_CLAIM.计数循环


V_EXIST_RECORD_CLAIM := 0 ;

执行即时'选择计数(1)从'|| v_ Master_clm ||'
其中NVL (提交,''否'') =''否''
和NVL (操作,“X”)不在(“AD”,“M”)中
与状态='|| '''' ||v_state || '''' ||'
AND type_of_声明='|| '''' || v_type || '''' ||'
and TTID ='|| '''' || v_tt || '''' ||'
AND '|| V_MATER_CLAIM(J).COlumN_NAME||'不为空'
进入V_EXIST_RECORD_CLAIM ;

如果V_EXIST_RECORD_CLAIM > 0 ,则

--标记在列中具有值的数据,从而从不同的表中读取值以在主表中更新。

V_SQL1:='更新'||v_ Master_clm||'m
SET UPDATE_阶= UPDATE_阶||'','||( SELECT_NO自'|| v_阶阶阶阶阶阶阶阶阶阶阶阶阶阶阶阶阶阶阶阶阶阶阶阶阶阶阶阶阶阶阶阶阶阶阶阶阶阶阶阶阶阶阶
其中列名='|| '''' ||V_MATER_CLAIM(i).COlumN_NAME ||'''' ||'
和中的t.COlumN_IN (''页眉',''详细信息'')
与t. TABLE_CATGORY ='||'''||V_ TABLE_CATGORY ||''''||'
和排数=1)
其中m.TTID = :p_tt
AND'||V_MATER_CLAIM(i).COlumN_NAME||'不为空
和(数据级别为NULL或NVL(DATA_级别,''空')类似“%IcnNull%”)
AND m.state = :p_state
AND m.type_of_声明= :p_type
';
执行即时V_SQL1
使用v_tt、v_state、v_type; --这些值将作为参数传递

结束IF ;

结束弧线;
当C_MATER_CLAIM%未找到时退出;

结束弧线;
如果C_MATER_CLAIM%是打开的,则
关闭C_MATER_CLAIM ;
结束IF ;

结束;


请让我知道你的建议,以提高性能或其他的逻辑书写方式。

专家解答

首先,您需要确定是SELECT还是UPDATE运行缓慢。我将假设是SELECT ,但您应该确认这一点。

如果我问你,你是否有一棵树有叶子,你会至少检查一叶吗?或者爬上树数数每一个?

所以改变吧:

AND '|| V_MATER_CLAIM(J).COlumN_NAME||'不为空'



AND '|| V_MATER_CLAIM(J).COlumN_NAME||'不为空且第1行'

看看这样能不能改善情况。


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论