MySQL:一次更新数百行?

时间:2015-04-13 13:02:57

标签: mysql

一次更新几百行是否实用或可行,还是有一种我不知道的批量更新技术?

我已经为这个问题做了一个谷歌,但它不断抛出结果,将多个UPDATE查询合并为一个。

正如您可以想象的那样,当发出超过300条更新语句的请求时,我宁愿不启动此操作并导致服务器出现问题。

3 个答案:

答案 0 :(得分:1)

300更新语句应该不是问题。您只需使用update

update table t
    set . . .
    where . . .

如果桌面上有非常复杂的触发器,可能会出现问题。

通常,当数字达到数万时,您需要开始担心更新。然后,日志记录的开销和锁定表所花费的时间会对性能产生影响。

答案 1 :(得分:1)

300+没什么,我们在一个同步工作中更新了大约80k记录,它基本上是通过这样的连接来完成的

UPDATE table_1
                INNER JOIN table_2 ON (table_1.DnameId = table_2.DNDOMAIN_ID)
                SET 
                table_1.Label = table_2.DOMAIN_LABEL,
                table_1.Extension = table_2.DOMAIN_EXTENSION

在你的情况下,

update table_name set column='value'

会顺利进行。

答案 2 :(得分:1)

300个语句可能看起来不是问题,但如果您有严格的SLA,则应该寻求优化解决方案。由于没有明确的信息可用作执行的性质(是批量作业?在线请求还是其他任何内容),我建议您在实施逻辑之前考虑以下方法。

  1. 在一个事务处理单元内调用300多个语句比在每个查询中调用事务更好。如果要求的性质对于每个查询都不需要隔离事务,我建议您最好为所有人进行一次事务处理。但请记住,有一个问题,如果其中一个记录失败,那么所有更新的数据也将被回滚。
  2. 当涉及批量数据操作并且可以使用文件使数据可用时,尽可能多地使用本机更新程序,例如LOAD DATA INFILE
  3. 检查表是否有任何触发器,一旦更新数据就会生效。这将对查询执行产生重大影响。