-4 oracle performance plsql query-optimization
我遇到了性能问题,也许您可以帮忙。当我打开游标时,然后运行其他几个SELECT语句以使用游标中的变量来检索值(请参见下文)。这似乎减慢了整个过程。我认为这是因为PL / SQL和SQL引擎之间的切换。使用表集合会有所帮助吗?但是,正如我所看到的,由于我需要来自不同表的不同列,因此我需要具有多个不同的集合,如何在一条记录中输出所有内容以返回结果集?
CREATE OR REPLACE procedure sp_test (in_input in number)
as
v_calc number;
v_calc_res number;
v1 number;
v2 number;
v3 number;
CURSOR C_test IS
select col1 from test where col1 = in_input;
begin
open c_test
loop
fetch c_test into v_calc;
select col1 into v1 from t1;
select col1 into v2 from t2;
select col1 into v3 from t3;
v_calc_res := v_calc * 5 * v1 * v2 * v3;
dbms_output.put_line(v_calc_res);
end loop;
end sp_test;
/
Run Code Online (Sandbox Code Playgroud)
逐行通常是缓慢的。
最快的方法-如果可能的话-将跳过循环并在单个SELECT语句中完成所有操作,并将所有涉及的表联接到该操作中。那可能是一个巨大的查询,因此我建议您逐步进行操作,一个接一个地添加表,检查性能,注意执行计划,涉及的索引列以及其他可能有助于提高性能的内容。