性能问题-集合会提高性能吗?

-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)

Lit*_*oot 5

逐行通常是缓慢的。

最快的方法-如果可能的话-将跳过循环并在单个SELECT语句中完成所有操作,并将所有涉及的表联接到该操作中。那可能是一个巨大的查询,因此我建议您逐步进行操作,一个接一个地添加表,检查性能,注意执行计划,涉及的索引列以及其他可能有助于提高性能的内容。