【问题标题】:Bulk Collect V/S Simple Update in DBMS在 DBMS 中批量收集 V/S 简单更新
【发布时间】:2017-09-11 09:32:41
【问题描述】:

查询1:

UPDATE employee
     SET key1 = NULL,
         status = 'COMPLETE'
  WHERE key2 = <someId>
   and  status IN ('APPROVED','AVAILABLE','UNPAID');

查询2:

SELECT employee_id
      BULK COLLECT INTO l_Ids
      FROM employees
     WHERE key1 = <somekey>   -- Bug 26721012
     and status IN ('APPROVED','AVAILABLE','UNPAID');

FORALL i IN 1 .. l_Ids.COUNT 
 UPDATE employees
     SET key1 = NULL, -- Bug 26721012
         status = 'COMPLETE'
     WHERE invoice_id = l_Ids(i).employee_id;}`

这部分是PLSQL 过程的一部分。让我们假设这两个查询都有要更新的批量数据。我的理解是,对于第一个查询,更新将一个接一个地发生,而对于第二个查询,BULK collect 可能会更快。然而,在 sql 和 plsql 引擎之间会有两个上下文切换。您能否解释一下在更新批量数据时会优化哪个查询

【问题讨论】:

  • mySQL sql-server,你提到了 PLSQL,它建议使用 Oracle。它是哪一个?不要标记未涉及的产品。
  • a) 你为 mysql 和 (ms)-sql 服务器标记了这个问题,但不是 oracle b) 你的两个代码段做的事情不一样 c) 绝对没有使用批量收集这种情况(所以使用查询 1 就可以了) d) 如果您想询问不同的情况,请询问不同的(实际)情况。

标签: mysql sql-server database


【解决方案1】:

在这两个选项中,第一个查询会更高效、更快。

从您的第一个查询中可以清楚地看出,您只需要根据过滤条件更新表中的数据。这可以在 SQL 本身中轻松完成,无需先将数据加载到集合中,然后再更新。

如果您必须对表格的每一行执行一些操作,则首选批量收集来代替光标。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-15
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多