使用函数调用从选择中插入到表的 Oracle 中的性能
Posted
技术标签:
【中文标题】使用函数调用从选择中插入到表的 Oracle 中的性能【英文标题】:Performance in Oracle insert to table from select with function calls 【发布时间】:2018-08-20 10:10:12 【问题描述】:我正在编写一个查询来计算一些值并定期将它们保存到一个表中。我需要的值是从函数调用返回的。
这些值需要保存到表中,我有一个 dbms 计划作业将这些值插入到表中。该作业执行以下操作;
BEGIN
execute immediate 'truncate table tbl1';
INSERT /*+ append*/ INTO tbl1(v1, v2, v3, v4)
SELECT
function1(input),
function2(input),
function3(input),
SYSDATE
FROM tbl;
END;
计划的作业运行超过 8 小时,记录超过 50 万条!我了解函数中的逻辑非常耗时,并且在从函数中进行选择时会发生上下文切换。我有没有其他方法可以实现这一目标,并且性能更好?
我使用的是 Oracle 12c。有什么建议可以让我更快地完成这项工作吗?
【问题讨论】:
显然问题出在函数上,所以请给我们看他们的代码。也许RESULT_CACHE
可能会有所帮助。
@WernfriedDomscheit 感谢您的意见。不幸的是,我无法更改函数的内容。我只是使用这些函数来构建查询,并且必须从我的最终找出一些东西。 :( 我会检查 RESULT_CACHE 谢谢!:)
请注意,启用RESULT_CACHE
需要更改功能代码。
【参考方案1】:
函数复杂吗?
如果不是,不能在每次插入 tbl 后调用函数并将结果存储在新列中吗?因此,当调用作业时,函数 1、2 和 3 将替换为存储值的 colmun。
【讨论】:
以上是关于使用函数调用从选择中插入到表的 Oracle 中的性能的主要内容,如果未能解决你的问题,请参考以下文章