mysql - 部分更新表时 SELECT 和 UPDATE 的性能比较

标签 mysql performance select sql-update

有一个表需要更新。但是,更改的数据量(比较我们获得的新数据和数据库中的数据)是未知的。

我可以想到两种实现方法。

  1. 选择所有数据并在网络服务器中进行比较。然后只更新 那些改变了。
  2. 只需更新所有数据。

我猜他们有一个性能边界。如果受影响的行少于 1,000,那么也许方法 2 更好。

我的问题是:

  1. 对此有通用标准吗?
  2. 一般select可以和update操作比较吗?

假设数据库是 MySQL,如果需要的话。

最佳答案

如果您要替换整个表(可能使用大部分相同的数据),这样做非常简单,无需担心采用哪种方法:

CREATE TABLE new LIKE real;
Load the new data entirely into `new`
RENAME TABLE real TO old, new TO real;  -- atomic and instantaneous (no downtime)
DROP TABLE old;

如果只有部分行可用,将它们加载到临时表中,然后执行多表 UPDATE 以将任何新值传输到实际表中。

如果您的新数据可能有新行,那么您需要另一个步骤来定位新行并将它们INSERT ... SELECT LEFT JOIN ... 放入真实表中。

如果您需要进一步讨论,请提供更多详细信息。

关于mysql - 部分更新表时 SELECT 和 UPDATE 的性能比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39264774/

相关文章:

python - 如何最佳地计算python列表中的元素

ruby - 在另一个 block 中使用传递的 block

c++ - 在同一个 fd(socket) 上连续 2 次 SELECT 系统调用,一个需要时间,而第二个立即返回,为什么?

mysql - 从 MySQL 表中随机选择最后三个条目之一

mysql连接大表错误解释

mysql - sql查询在大数据上需要时间

php - 保存小部件设置: php file vs db [apc installed]

java - 为什么分配单个 2D 数组比循环分配多个总大小和形状相同的 1D 数组花费的时间更长?

SQL 使用列名别名而不使用 SELECTING

MySQL表名和字段名应该大写吗?