- 假设您有一个包含 100 万行并且还在增长的表......
- 每天每五分钟运行一个 python 程序,该程序必须更新一些 50K 行的字段
我的问题是:完成这项工作最快的方法是什么?
- 在循环中运行这些更新,在执行完最后一个更新后启动游标提交?
- 或者生成文件然后通过命令行运行它?
- 通过大量快速插入创建临时表,然后对生产表运行一次更新?
- 做准备好的陈述?
- 将其拆分为每次执行 1K 更新,以生成更小的日志文件?
- 在运行更新时关闭日志记录?
- 或者在mysql中做一个案例examples (但这只适用于最多 255 行)
我不知道...有人做过这样的事吗?什么是最佳做法?我需要尽快运行它...
最佳答案
这里有一些方法可以加快您的更新
。
当您UPDATE
时,表记录只是被新数据重写。所有这些都必须在 INSERT
上再次完成。这就是为什么您应该始终使用 INSERT ... ON DUPLICATE KEY UPDATE
而不是 REPLACE
。
前者是在违反 key 的情况下进行UPDATE
操作,而后者是DELETE/INSERT
这是一个示例 INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;
关于此的更多信息 here .
UPDATE1:最好在单个查询中完成所有插入操作。这应该会加快您的 UPDATES
。参见 here关于如何做到这一点。
更新 2: 现在我有机会阅读您的其他子问题。这是我所知道的-
- 不要在循环中,尝试在单个 sql 和单个提交中执行所有
UPDATE
。 - 不确定这会有什么不同。
SQL
查询更重要。 - 现在这是您可以尝试的东西。对其进行基准测试。这种事情取决于
TABLE
和INDEXES
的大小,加上INNODB 或 MYISAM
。 - 对此一无所知。
- 引用第一点。
- 是的,这可能会稍微加快您的速度。另请查看您是否打开了
slow_query_log
。这会将所有慢速查询记录到一个单独的日志文件中。也将其关闭。 - 再次。请引用第一点。
关于python - 在 mysql 中更新数千行的最快方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4031814/