Mysql 使用innodb作为引擎向大表添加密钥时如何进行优化?
有一张几百万行的桌子。 我提交以下查询:Mysql 使用innodb作为引擎向大表添加密钥时如何进行优化?,mysql,innodb,Mysql,Innodb,有一张几百万行的桌子。 我提交以下查询: ALTER TABLE my_data ADD KEY `sex_birth` (`sex`, `birth`); 这需要38分钟44.53秒 如何优化此查询以更快地运行?您无法真正使此查询更快。但是您肯定可以做一些事情,这样您的应用程序不会宕机太久 使用其他名称创建此表的副本,例如my\u data\u alter。在这张桌子上运行alter 您将需要运行的所有更新/插入/删除的日志,因为您在alter完成时获取了副本。然后您必须运行这些查询到my\
ALTER TABLE my_data ADD KEY `sex_birth` (`sex`, `birth`);
这需要38分钟44.53秒
如何优化此查询以更快地运行?您无法真正使此查询更快。但是您肯定可以做一些事情,这样您的应用程序不会宕机太久 使用其他名称创建此表的副本,例如
my\u data\u alter
。在这张桌子上运行alter
您将需要运行的所有更新/插入/删除的日志,因为您在alter完成时获取了副本。然后您必须运行这些查询到my\u data\u alter
如果表中发生的事务数量太多,这将是一种永无止境的循环
最后,只需在一个查询中重命名这两个表
我知道这会有点棘手。在非高峰时间做这种事情
我建议您编写一些脚本来完成这项工作。这可能需要一段时间,但此操作非常罕见,因此您只需要处理它。例如,Twitter的家伙们说,在他们的数据库中添加一个新列需要2周的时间。