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

6
假设您有一张包含100万行且正在增长的表...每天每五分钟运行一个Python程序,必须更新50000行的某些字段。
我的问题是:最快的方法是什么?
是否应循环运行这些更新,并在执行最后一个更新后启动游标提交?
还是生成文件,然后通过命令行运行它?
通过大容量和快速插入创建临时表,然后对生产表进行单个更新?
使用预处理语句?
将其分成每次执行1000个更新,以生成较小的日志文件?
在运行更新时关闭日志记录?
或者在MySQL中进行examples案例(但这只适用于255行以下)
我不知道...有人做过类似的事情吗?哪种方法最佳?我需要尽快运行...

读取方面怎么样?数据库读取占90%的时间还是仅用于保留信息,写入占90%的时间,读取只占10%的时间? - nerkn
2个回答

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; 更多信息请参见这里
更新1: 把插入操作全部放在单个查询中是个好主意。这应该可以加速您的UPDATES。请参阅这里
更新2:现在我有机会阅读您的其他子问题了。这是我知道的:
  • 尝试在单个sql和单个提交中执行所有UPDATE,而不是在循环中执行。
  • 不确定这样做是否会有任何区别。SQL查询更重要。
  • 现在这是您可以尝试的事情。进行基准测试。这种事情取决于您拥有的TABLE的大小和INDEXES,以及INNODB或MYISAM
  • 没有什么头绪。
  • 参考第一点。
  • 是的,这可能会稍微加速您的事情。另请查看是否已打开slow_query_log。这将所有慢查询记录到单独的日志文件中。也关闭它。
  • 再次参考第一点。

好的,谢谢。但是您想如何在单个SQL中更新五万行? - nabizan

0
查询执行过程:服务器首先解析您的查询,然后执行需要分析查询。然后服务器花费较少的时间来解析,从而以比其他方式更快的速度执行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接