【问题标题】:Update multiple records using a single query for performance使用单个查询更新多条记录以提高性能
【发布时间】:2014-04-16 09:56:30
【问题描述】:

我在循环中执行了数千次更新查询。

一切顺利,但问题是所有更新都需要大量时间。

如果我像这样在一个字符串中连接/组合所有更新查询:

$update_query = "";
while(condition)
{
    $update_query = $update_query  . " update table set ... ; ";
}

然后执行一次$update_query,会有帮助吗?

或者我还能做些什么来获得更好的性能?有什么提示或建议吗?

【问题讨论】:

  • 确保您使用的是行级锁定(存储引擎是 innodb 或其他具有行级锁定的,myisam 没有这样的)并且您的 where 子句中有一个索引(最好case - 唯一索引)。您也可以关闭自动提交,并立即提交...

标签: php mysql sql performance


【解决方案1】:

您正在寻找的是批量更新查询,例如:

UPDATE mytable
SET myfield = CASE other_field
    WHEN 1 THEN 'value'
    WHEN 2 THEN 'value'
    WHEN 3 THEN 'value'
END 
WHERE id IN (1,2,3)

【讨论】:

  • 这会很好,但我有数千条记录,每次更新都会更新多个列,在这种情况下会变得很困难。
【解决方案2】:

您可以使用INSERT ... ON DUPLICATE KEY UPDATE

INSERT INTO table (id, value) VALUES (1, 'value1'), (2, 'value2')
ON DUPLICATE KEY UPDATE
value = VALUES(value)

【讨论】:

  • 听起来不错!它会检查主键重复还是整行重复?
  • @Vitthal 它将检查任何唯一索引的重复,而不是整行
  • @Darhazer 谢谢!这对我有用。它比正常的多次更新要快得多。
猜你喜欢
  • 2023-03-30
  • 1970-01-01
  • 2019-10-27
  • 1970-01-01
  • 2010-09-07
  • 1970-01-01
  • 2017-01-03
  • 2021-09-22
  • 2019-04-17
相关资源
最近更新 更多