【问题标题】:Is the use of the RETURNING INTO clause faster than a separate SELECT statement?使用 RETURNING INTO 子句是否比单独的 SELECT 语句更快?
【发布时间】:2013-08-07 18:34:48
【问题描述】:

1)

update foo set bar = bar + 1 where a = 123;
select bar into var from foo where a = 123;

2)

update foo set bar = bar + 1 where a = 123 RETURNING bar into var;

我认为第二个更快,因为它似乎需要少一次访问数据库。这是真的吗?

【问题讨论】:

  • 这是个有趣的话题。我会说它更快。需要编写一个小程序来测试它。但是返回有用的地方是删除。因为你不能删除-选择。但是你可以删除-返回。
  • 这些替代方案在技术上并不等同。第一个可能会引发 TOO_MANY_ROWS(除非 a 具有唯一约束),而第二个不会。即使a 是唯一标识符,第一个可能会引发 NO_DATA_FOUND 而第二个不会。

标签: oracle plsql


【解决方案1】:

正如我所想:

通常,应用程序需要有关受 SQL 操作影响的行的信息,例如,生成报告或采取后续操作。 INSERT、UPDATE 和 DELETE 语句可以包含一个 RETURNING 子句,它将受影响行中的列值返回到 PL/SQL 变量或主变量中。这消除了在插入或更新之后或删除之前选择行的需要。因此,需要更少的网络往返、更少的服务器 CPU 时间、更少的游标和更少的服务器内存。

Taken from Oracle docs here

【讨论】:

  • 谢谢 T.S.我也这么认为,但我想知道 Oracle 是否只是让它看起来只需要一趟,而在幕后它只是执行一个 SELECT INTO 语句来为我们提供语法糖。
  • 我从没想过它是语法糖。我以为这就像触发器。在更改数据时,Oracle 具有两个值(更新)并且可以对它们做一些事情,例如“返回”给调用者。在这种情况下,只能返回一个值,有一个就新建,或者删除
  • 在您投票批准修改之前,请更加努力地审核修改。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-20
  • 1970-01-01
相关资源
最近更新 更多