在mysql中复制表的最快方法?

时间:2010-05-31 12:09:05

标签: sql mysql

我想在MySQL中复制一个表。什么是最快的方式?喜欢这个?

CREATE TABLE copy LIKE original;
INSERT INTO copy SELECT * FROM original;

CREATE TABLE copy SELECT * FROM original;
ALTER TABLE copy ADD PRIMARY KEY (id);

还是有另一种方式吗?

编辑:我担心重新创建索引,mysql如何继续执行这些语句?

PS。不能使用像mysqldump这样的命令行工具,必须是即时的。

10 个答案:

答案 0 :(得分:48)

这会立即复制表格的结构,但不会复制数据:

CREATE TABLE copy LIKE original;

这将创建original表的所有索引。

它在mysql 5.1.39中以这种方式工作。

答案 1 :(得分:42)

使用 MyISAM 表格的最快方式,而保留索引)以及其他存储引擎:

CREATE TABLE copy LIKE original;
ALTER TABLE copy DISABLE KEYS;
INSERT INTO copy SELECT * FROM original;
ALTER TABLE copy ENABLE KEYS;

您希望禁用数据库加载的密钥,然后在最后重新创建密钥。

同样,对于 InnoDB

SET unique_checks=0; SET foreign_key_checks=0; 
..insert sql code here..
SET unique_checks=1; SET foreign_key_checks=1;

(正如评论中指出的那样。)

答案 2 :(得分:13)

来自manual

“CREATE TABLE ... SELECT不会自动为您创建任何索引。这样做是为了使语句尽可能灵活。如果要在创建的表中包含索引,则应在SELECT之前指定这些索引。声明:“

CREATE TABLE bar (UNIQUE (n)) SELECT n FROM foo;

您可以使用CREATE TABLE LIKECREATE TABLE SELECT指定索引和数据类型(以避免数据类型转换)。哪一个更快将取决于您的设置。

答案 3 :(得分:8)

要使用索引和触发器进行复制,请执行以下两个查询:

CREATE TABLE newtable LIKE oldtable; 
INSERT newtable SELECT * FROM oldtable;

要复制结构和数据,请使用以下内容:

CREATE TABLE tbl_new AS SELECT * FROM tbl_old;

答案 4 :(得分:6)

create table mynewtable (select * from myoldtable)是否可以在mysql中运行?如果是这样,你也可以试试。

答案 5 :(得分:5)

将结构和所有条目从一个表复制到另一个表(通过创建新表)的最佳方法是此查询......

<强> CREATE TABLE new_table LIKE old_table; INSERT new_table SELECT * FROM old_table;

答案 6 :(得分:3)

尝试SELECT INTO,并使用variable作为中间人。

首先,您必须创建接收表,以使其具有与源表相同的结构。

最好的是,它是内部的,所以它很快。但是你会失去你的索引。

答案 7 :(得分:2)

如果您使用的是MyISAM,您还可以复制和重命名单个文件。 .MYD,.MYI,后端的.FRM文件

答案 8 :(得分:1)

也许你可以看看SHOW CREATE TABLE

采取的步骤:

  • 转到phpmyadmin

  • 转到SQL

执行此查询

SHOW CREATE TABLE `the_old_table`;
  • 点击选项 选中“全文”,然后按“执行”。

结果是一个完整的CREATE TABLE语句。编辑查询,直到您满意为止。

资源: http://dev.mysql.com/doc/refman/5.7/en/show-create-table.html

答案 9 :(得分:0)

CREATE TABLE copy SELECT * FROM original;

是快速的方式,但可能不是索引的最快原因。