【问题标题】:Best solution for doing database migration on mysql?在 mysql 上进行数据库迁移的最佳解决方案?
【发布时间】:2013-03-27 07:09:11
【问题描述】:

我目前在进行迁移时面临一个问题,尤其是向包含数百万条记录的现有表添加新字段需要很长时间才能完成。所以我想知道有没有什么特别的技巧可以让它快速迁移?

【问题讨论】:

    标签: mysql database database-migration rails-migrations


    【解决方案1】:

    要在不锁定表的情况下执行此操作,您可以创建一个包含正确列的新表,从旧表中选择数据,重命名旧表,重命名新表,删除“旧重命名表”

    有些是这样的;

    CREATE TABLE `table_new` LIKE `table`;
    ALTER TABLE `table_new` ADD COLUMN ...;
    ALTER TABLE `table_new` ADD COLUMN ...;
    ALTER TABLE `table_new` ADD COLUMN ...;
    INSERT INTO `table_new` SELECT x, y, z, 'newcol', 'newcol2', 'newcol3' FROM `table`
    RENAME TABLE `table` TO `table_old`;
    RENAME TABLE `table_new` TO `table`;
    -- DROP TABLE `table_old` -- Might just leave this out for now, who knows...
    

    要考虑的另一件事可能是索引,为插入关闭它并在插入后重新启用它们,这样它们就不必一直重新计算。

    【讨论】:

    • 如果我们这样做,将百万条记录插入新表的时间也将花费很多时间,可能比仅添加迁移字段要多。不是吗?
    • 不,最好在事务中执行此操作,这比向大表中添加列要快得多。无需为每一行的新列分配空间,而是从头开始分配空间。
    • 我只记得这个来自 facebook mysql 团队的老宝石,facebook.com/note.php?note_id=430801045932 这是一本好书
    • @pang 你有机会尝试一下吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-23
    • 2011-01-17
    相关资源
    最近更新 更多