繁体   English   中英

在MySQL中更新超过百万条记录的最佳方法

[英]Best way to update over million records in mysql

我有一个MySQL表格,其中包含超过一百万行的用户信息。 我想在该表中添加一列“密码”,随机生成密码并更新所有记录(使用PHP)。 什么是执行此任务的最快方法? 提前致谢。

可能的情况

  1. 用您的php脚本将所有密码生成到文件中
  2. 创建临时表并使用LOAD DATA INFILE (这是从文件导入数据的最快方法)从密码文件加载数据。
  3. 修改表格并添加password
  4. UPDATE与Join结合使用以从temp表更新原始表中的密码列
  5. 放置温度表

请记住,更改表的操作可能会花费很长时间,我建议将这两个步骤分开。

1)更改表,在这里我建议执行以下步骤(伪代码):

  • 创建类似于old_table的new_table
  • 修改new_table添加列密码
  • 插入new_table(列),然后从old_table中选择*
  • 将old_table重命名为old_table_bck,将new_table重命名为old_table
  • 删除old_table_bck

此时,您的原始表将带有新列。

2)现在,更改结构后,您可以使用php填充新列“ password”。 如果您使用InnoDB作为存储引擎,则时间无关紧要,因为您未使用更新锁定表。 如果您在事务中执行此操作,建议不要将更新过程细分为较小的事务,而不要插入大量事务。

如果您不能(最少)停机,我建议您看一下pt-online-schema-change ,我们在主要数据库上使用了此工具,在这些主要数据库中,我们可以不花任何时间进行停机,以便在数据库处于运行状态时进行架构更改运行。 它大致执行上述步骤(1),并另外在触发器的帮助下确保在执行更改过程时插入原始表中的数据也被写入更改后的表中。

暂无
暂无

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

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