Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 克隆表减去任何键的最快方法_Mysql - Fatal编程技术网

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请参阅我更改的答案