【问题标题】:performance anaysis (select in loop vs function call in loop )性能分析(循环中选择与循环中的函数调用)
【发布时间】:2016-11-08 05:47:11
【问题描述】:

我想在这里问一个与性能相关的问题,我的问题是哪种方法最好

1 在循环中添加子查询

declare
test varchar2(50);

FOR Lcntr IN 1..20

LOOP

   update emp set empno='50'  where empname=test;

END LOOP;

2 在循环中添加函数调用或将上述查询的函数做成循环调用

declare

test varchar2(50);

FOR Lcntr IN 1..20
LOOP

  temp:=update('argument');

END LOOP;

【问题讨论】:

  • 由于两种情况下的循环构造相同,我不确定它与问题有什么关系。难道你的问题不能通过删除循环来简化吗?

标签: sql database oracle plsql


【解决方案1】:

如果您的函数update 只是调用相同的sql 更新,那么您是否直接从存储的函数中调用它并不重要。 通常,最好的方法是使用一条 sql 语句(更新或合并)来更新您需要的整个数据集。

但是你的更新看起来很奇怪: 在第一个 pl/sql 块中,您声明变量 test。并且测试等于null。之后,您尝试通过与null 进行比较来更新表 - 不会影响任何行。

在第二个 pl\sql 块中,您也声明变量 test,但使用变量 temp。它会在编译中引发错误。

【讨论】:

  • @micheal 感谢您的回复,它只是虚拟代码,但我的问题是整体性能哪个更适合大量数据
  • @fawad 嗨。但不清楚区别在哪里?在第一个变体中,您直接调用更新,据我了解,在第二个变体中,您从函数中调用相同的更新。如果只有不同,那么无论您是调用 udpate 还是调用函数女巫调用 update 都无关紧要。在这两种情况下,我都知道瓶颈(如果存在的话)是在 pl/SQL 和 SQL 处理器之间切换上下文,但它会以两种方式使用。
猜你喜欢
  • 1970-01-01
  • 2012-08-18
  • 1970-01-01
  • 1970-01-01
  • 2021-09-27
  • 2012-06-19
  • 2015-08-28
  • 2014-09-10
  • 1970-01-01
相关资源
最近更新 更多