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

标签 python mysql performance

  • 假设您有一个包含 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 查询更重要。
  • 现在这是您可以尝试的东西。对其进行基准测试。这种事情取决于 TABLEINDEXES 的大小,加上 INNODB 或 MYISAM
  • 对此一无所知。
  • 引用第一点。
  • 是的,这可能会稍微加快您的速度。另请查看您是否打开了 slow_query_log。这会将所有慢速查询记录到一个单独的日志文件中。也将其关闭。
  • 再次。请引用第一点。

关于python - 在 mysql 中更新数千行的最快方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4031814/

相关文章:

php - 基于列值打印值 - MYSQL、PHP

c++ - 为什么对排序 vector 的二分查找比 std::set 查找慢?

ios - 核心数据性能 : predicate on more to-many relationships

python - 二维数组结构python

python - Cython cdef 没有速度增加

Python:Flask request.args.get 表中包含空值

algorithm - 寻找素数的快速算法?

python - 如何在 Django 中获取 TextField 的长度?

javascript - JQUERY + PHP + AJAX 不起作用

python - 连接 Python、MySQL 和 HTML