更新 mysql 中数千行的最快方法是什么

nab*_*zan 6 python mysql performance

  • 假设您有一个包含 1M 行并且不断增长的表...
  • 每天每五分钟运行一个 python 程序,该程序必须更新 50K 行的某些字段

我的问题是:完成这项工作最快的方法是什么?

  • 在循环中运行这些更新,并在执行最后一个更新后启动游标提交?
  • 或生成文件然后通过命令行运行它?
  • 通过巨大且快速的插入创建临时表,然后对生产表运行单个更新?
  • 做准备好的陈述吗?
  • 每次执行将其拆分为 1K 更新,以生成更小的日志文件?
  • 运行更新时关闭日志记录?
  • 或者在 mysql示例中做一个案例(但这最多只能处理 255 行)

我不知道……有人做过这样的事吗?最佳做法是什么?我需要尽快运行它......

Sri*_*aju 4

这里有一些可以加快您的UPDATES.

当您执行此操作时UPDATE,表记录刚刚被新数据重写。而这一切都必须在 上再次完成INSERT。这就是为什么您应该始终使用INSERT ... ON DUPLICATE KEY UPDATE而不是REPLACE.

前者是UPDATE关键违规时的操作,而后者是DELETE / INSERT

这是一个示例,INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;更多信息请参见此处

UPDATE1:最好在单个查询中完成所有插入。这应该会加快你的UPDATES. 请参阅此处了解如何执行此操作。

UPDATE2:现在我有机会阅读您的其他子问题。这是我所知道的-

  • UPDATE尝试在单个 sql 和单个提交中执行所有操作,而不是在循环中。
  • 不确定这会产生任何影响。SQL查询更重要。
  • 现在您可以尝试一下。对其进行基准测试。这种事情取决于你所拥有的TABLE&的大小INDEXES,再加上INNODB or MYISAM
  • 对此一无所知。
  • 参考第一点。
  • 是的,这可能会稍微加快你的速度。另外看看你是否已经slow_query_log开启。这会将所有慢速查询记录到单独的日志文件中。把这个也关掉。
  • 再次。参考第一点。