我正在执行一些MySQL表维护,这意味着删除一些冗余列并添加一些新列。
要删除的某些列与要添加的列类型相同。如果我利用这个并重用一些现有的列,那么程序会更快吗?
我的理由是更改列名应该是一个简单的表元数据更改,而删除和添加列意味着要么在文件末尾查找空间(分段数据),要么使用正确的列重建每一行,以便它们是在磁盘上的同一个地方。
有问题的引擎是MyISAM,我不知道它究竟会如何处理这个问题,所以我想听听之前处于同样情况的人!
答案 0 :(得分:1)
除非你有一个严重的性能问题,否则我不会采用重命名方法 - 因为你要留下的所有脏数据都会出现。
此外,通过删除表,您将导致重建任何索引 - 这偶尔会有一个好主意......
马丁
答案 1 :(得分:0)
我会删除列。无论哪种方式,你都会有碎片。这应该在您的常规维护计划中处理。在大量修改操作之后,您可以加速这些操作。
答案 2 :(得分:0)
如果您不知道,在Myisam表中,每个ALTER TABLE操作都会执行整个表的副本,因此在您的服务器需要复制表时,该表将被锁定。
答案 3 :(得分:0)
我使用了相同的逻辑,并且因为即使对于不应该重写表的更改(即表重命名)而受到攻击,MySQL错误导致它认为这是一个需要重写表的更改
如果您正在处理的字段是日期,日期时间或时间戳字段,则可能会被此命中,这意味着您应该假设它必须进行完全重写并按此计划。