批量收集DBMS中的V / S简单更新

时间:2017-09-11 09:32:41

标签: mysql sql-server database

查询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引擎之间会有两个上下文切换。您能否解释一下在更新批量数据时哪个查询会优化

1 个答案:

答案 0 :(得分:0)

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

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

如果您必须对表格的每一行采取某些操作,则可以使用批量收集代替游标。