在MySQL alter table中,RENAME比DROP + ADD更快

时间:2009-10-05 15:58:14

标签: sql mysql optimization alter-table

我正在执行一些MySQL表维护,这意味着删除一些冗余列并添加一些新列。

要删除的某些列与要添加的列类型相同。如果我利用这个并重用一些现有的列,那么程序会更快吗?

我的理由是更改列名应该是一个简单的表元数据更改,而删除和添加列意味着要么在文件末尾查找空间(分段数据),要么使用正确的列重建每一行,以便它们是在磁盘上的同一个地方。

有问题的引擎是MyISAM,我不知道它究竟会如何处理这个问题,所以我想听听之前处于同样情况的人!

4 个答案:

答案 0 :(得分:1)

除非你有一个严重的性能问题,否则我不会采用重命名方法 - 因为你要留下的所有脏数据都会出现。

此外,通过删除表,您将导致重建任何索引 - 这偶尔会有一个好主意......

马丁

答案 1 :(得分:0)

我会删除列。无论哪种方式,你都会有碎片。这应该在您的常规维护计划中处理。在大量修改操作之后,您可以加速这些操作。

答案 2 :(得分:0)

如果您不知道,在Myisam表中,每个ALTER TABLE操作都会执行整个表的副本,因此在您的服务器需要复制表时,该表将被锁定。

答案 3 :(得分:0)

我使用了相同的逻辑,并且因为即使对于不应该重写表的更改(即表重命名)而受到攻击,MySQL错误导致它认为这是一个需要重写表的更改

如果您正在处理的字段是日期,日期时间或时间戳字段,则可能会被此命中,这意味着您应该假设它必须进行完全重写并按此计划。