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

时间:2013-07-17 08:08:38

标签: php mysql sql-update rows records

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

2 个答案:

答案 0 :(得分:-1)

可能的情况

  1. 使用您的php脚本生成所有密码到文件中
  2. 创建临时表并使用LOAD DATA INFILE(恰好是从文件导入数据的最快方法)从密码文件加载数据。
  3. 更改您的表格并添加password
  4. 使用UPDATE加入来更新原始表中的临时表
  5. 中的密码列
  6. 放下临时表

答案 1 :(得分:-1)

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

1)改变表格,这里我建议采用以下步骤(伪代码):

  • 像old_table一样创建new_table
  • 更改new_table添加列密码
  • 插入new_table(列)select * from old_table
  • 将old_table重命名为old_table_bck,将new_table重命名为old_table
  • drop old_table_bck

此时,您的原始表格包含新列。

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

如果您不能(最小)停机,我建议您查看pt-online-schema-change,我们在主要数据库上使用此工具,我们无法在任何停机时间内进行架构更改正在跑步。它大致执行上述步骤(1),并且还借助于触发器确保在执行alter process时插入原始表的数据也写入更改的表。