查询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 收集,这可能会更快。然而,sql 和 plsql 引擎之间会有两个上下文切换。您能否解释一下在更新批量数据时哪个查询将被优化
最佳答案
在这两个选项中,第一个查询会更高效、更快。
从您的第一个查询中可以清楚地看出,您只需要根据过滤条件更新表中的数据。这可以在 SQL 本身中轻松完成,无需首先将数据加载到集合中,然后更新相同的数据。
如果您必须对表的每一行执行某些操作,则可以使用批量收集来代替游标。
关于mysql - DBMS 中的批量收集 V/S 简单更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46152419/