我正在使用>表格上的生产数据库200万行,以及col_a上的UNIQUE KEY,col_b。
我需要修改该索引,使其超过col_a,col_b和col_c。
我认为这是一个有效的原子命令来进行更改:
ALTER TABLE myTable
DROP INDEX `unique_cols`,
ADD UNIQUE KEY `unique_cols` (
`col_a`,
`col_b`,
`col_c`
);
这是最有效的方法吗?
答案 0 :(得分:2)
我不确定以下方式是否适合您。在我们自己遇到一些数据库问题并且必须快速修复它们之后,这对我们有用。
我们处理非常大的表格, 4-5GB大小。
这些表格> 200万行。
根据我们在运行任何形式的alter query时的经验/如果正在写表,表上的索引创建是危险的。
所以在我们的例子中,如果表格有24/7写入,我们会这样做:
使用正确的索引创建一个新的空表。
使用Percona等工具或手动编写脚本,逐行将数据复制到新表中。
这允许表使用更少的内存,并且还可以在您拥有MyISAM表时保存。
如果您有一个非常大的表没有定期写入,您可以在不使用时创建索引。
在任何一种情况下,您的目标应该是:
Save memory / load on the system.
Reduce locks on the tables
当我们为超大型表添加/删除列时,上述情况也适用,因此我们不仅可以创建索引,还可以添加和减去列。
希望这会有所帮助,任何人都可以自由地反对/添加我的答案。
一些更有帮助的答案: