Mysql 克隆表减去任何键的最快方法
我想将数据从一个生产表复制到一个临时历史存储中(在十天内可见,然后删除),以便有人可以根据需要审核以前的表。通常我会这样做:Mysql 克隆表减去任何键的最快方法,mysql,Mysql,我想将数据从一个生产表复制到一个临时历史存储中(在十天内可见,然后删除),以便有人可以根据需要审核以前的表。通常我会这样做: CREATE new_table LIKE old_table; INSERT INTO new_table SELECT * FROM old_table; 然而,这里我不关心任何键(主键、外键等等),只想优化插入数据的速度。最好的办法是什么?我当时的想法是将其从InnoDB更改为MyISAM,然后插入: CREATE TABLE new_table LIKE old
CREATE new_table LIKE old_table;
INSERT INTO new_table SELECT * FROM old_table;
然而,这里我不关心任何键(主键、外键等等),只想优化插入数据的速度。最好的办法是什么?我当时的想法是将其从InnoDB更改为MyISAM,然后插入:
CREATE TABLE new_table LIKE old_table;
ALTER TABLE new_table ENGINE = MyISAM;
INSERT INTO new_table SELECT * FROM old_table
有没有更快的办法
在一个~1M行/1GB的工作台上,这样做大约需要2米的时间:
添加:altertablenew\u tabledisable键代码>:
和CREATE TABLE new\u TABLE select*from old\u TABLE代码>
最快的一个(简略地说@nbk的答案),Create table new_table ENGINE=MyISAM SELECT*FROM old_table代码>
复制所有内容,但丢失索引外键和主键,唯一幸存下来的想法是不为空
Create table new_table SELECT * FROM old_table
Create table new_table3 ENGINE=MyISAM SELECT * FROM new_table
这可能会有所帮助:@user1452962在本例中,根据我的测试,表的导出时间比使用SELECT*
方法克隆表和所有数据所花费的时间都要长。当然,这是我最后一种方法,也是三种方法中最快的一种。如何加载数据填充
您认为这会更快吗?不,您必须在之前包含生成输出文件的时间,这将使时间成本加倍有一种方法使用engine=myisam创建新表
?这是正确的,我相信这是克隆表数据的最快方法。包括数据属性(如包含排序规则的数据类型),但不包括表属性(如键、默认排序规则等)。但是,生成的列将被创建为静态。@David542请参阅我更改的答案