首页 > 解决方案 > 使用函数调用从选择中插入到表的 Oracle 中的性能

问题描述

我正在编写一个查询来计算一些值并将它们定期保存到一个表中。我需要的值是从函数调用返回的。

这些值需要保存到表中,我有一个 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 上。关于如何使这项工作运行得更快有什么建议吗?

标签: sqloracleperformanceinsertcontext-switching

解决方案


功能复杂吗?

如果没有,是否不能在每次插入 tbl 后调用该函数并将结果存储在新列中?因此,当调用作业时,函数 1、2 和 3 将替换为存储值的 colmun。


推荐阅读