我遇到了性能问题,也许您可以帮忙。当我打开游标时,然后运行其他几个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; /
Littlefoot.. 5
逐行通常是缓慢的。
最快的方法-如果可能的话-将跳过循环并在单个SELECT
语句中完成所有操作,并将所有涉及的表联接到该操作中。那可能是一个巨大的查询,因此我建议您逐步进行操作,一个接一个地添加表,检查性能,注意执行计划,涉及的索引列以及其他可能有助于提高性能的内容。
逐行通常是缓慢的。
最快的方法-如果可能的话-将跳过循环并在单个SELECT
语句中完成所有操作,并将所有涉及的表联接到该操作中。那可能是一个巨大的查询,因此我建议您逐步进行操作,一个接一个地添加表,检查性能,注意执行计划,涉及的索引列以及其他可能有助于提高性能的内容。