繁体   English   中英

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

[英]what is the fastest way to update thousands rows in mysql

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

我的问题是:最快的工作方式是什么?

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

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

这里有一些方法可以加快你的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查询更重要。
  • 现在这是你可以尝试的东西。 基准吧。 这种事情取决于您拥有的TABLEINDEXES的大小,以及INNODB or MYISAM
  • 不知道这个。
  • 参考第一点。
  • 是的,这可能会略微提高你的速度。 另请参阅您是否slow_query_log 这会将所有慢速查询记录到单独的日志文件中。 把它关掉。
  • 再次。 参考第一点。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM