我有一个 mysql 表,其中包含超过一百万行的用户信息。我想在该表中添加一列“密码”,随机生成密码并更新所有记录(使用 PHP)。执行此任务的最快方法是什么?提前致谢。
问问题
1514 次
2 回答
-1
请记住,更改表的操作可能需要很长时间,我建议将这两个步骤分开。
1)修改表格,这里我推荐以下步骤(伪代码):
- 像 old_table 一样创建 new_table
- 更改 new_table 添加列密码
- 插入新表(列)从旧表中选择*
- 将 old_table 重命名为 old_table_bck,将 new_table 重命名为 old_table
- 删除 old_table_bck
此时,您的原始表中包含新列。
2)现在,在您更改结构后,您可以使用您的 php.ini 填充新列“密码”。如果您使用 InnoDB 作为存储引擎时间并不重要,因为您没有使用更新锁定表。如果您在事务中执行此操作,我建议将更新过程分解为较小的事务,而不是插入一大块。
如果您不能采取(最少)停机时间,我建议您查看pt-online-schema-change
,我们在主要数据库上使用此工具,我们无法在数据库运行时进行任何停机,以便在数据库运行时进行架构更改。它大致执行上述步骤(1),并在触发器的帮助下确保在执行更改过程时插入原始表的数据也写入更改的表。
于 2013-07-17T08:36:08.203 回答
-1
一个可能的场景
- 使用您的 php 脚本将所有密码生成到一个文件中
- 创建临时表并使用
LOAD DATA INFILE
(这恰好是从文件导入数据的最快方法)从密码文件加载数据。 - 更改表格并添加
password
列 - 与 join 一起使用
UPDATE
从临时表更新原始表中的密码列 - 删除临时表
于 2013-07-17T08:20:49.363 回答