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

标签 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 收集,这可能会更快。然而,sql 和 plsql 引擎之间会有两个上下文切换。您能否解释一下在更新批量数据时哪个查询将被优化

最佳答案

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

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

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

关于mysql - DBMS 中的批量收集 V/S 简单更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46152419/

相关文章:

mysql - 合并来自不同数据库的表

database - 在 PL/SQL 中创建触发器抛出编译错误

database - Windows Phone 7 数据库

php - 如何让我的 PDO 连接更有效率?

MySQL LEFT OUTER JOIN 选择最佳匹配而不更改 sql_mode

sql - 消息 8114,级别 16,状态 5,第 1 行将数据类型 varchar 转换为数字时出错

sql-server - 没有笛卡尔结果的 T-SQL 多数据透视语句

mysql - 是否可以在 mysql 中安排 cron 任务?

php - 如何获取一张表中的选定元素?

mysql - sql - 子查询中的关系未知