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

时间:2010-10-27 09:44:00

标签: python mysql performance

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

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

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

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

2 个答案:

答案 0 :(得分: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;的详细信息UPDATES

UPDATE1:最好在单个查询中完成所有插入操作。这应该加快你的UPDATE。有关如何执行此操作,请参阅here

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

  • 而不是循环,尝试在单个sql&中执行所有SQL单一提交。
  • 不确定这会有什么不同。 TABLE个查询更为重要。
  • 现在这是你可以尝试的东西。基准吧。这种事情取决于INDEXES&的大小。您拥有的INNODB or MYISAM加上slow_query_log
  • 不知道这件事。
  • 参考第一点。
  • 是的,这可能会让你的东西略微增加。同时查看您是否已启用{{1}}。这会将所有慢速查询记录到单独的日志文件中。关掉它。
  • 同样。参考第一点。

答案 1 :(得分:0)

查询执行过程:服务器首先解析你的查询然后执行你需要分析
查询

然后服务器花费更少的时间来解析然后他执行得更快而不是以其他方式缓慢