[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은 이러한 명령문을 어떻게 실행합니까?

추신. mysqldump와 같은 명령 줄 도구를 사용할 수 없으며 즉시 사용해야합니다.



답변

이렇게하면 테이블 구조가 즉시 복사되지만 데이터는 복사되지 않습니다.

CREATE TABLE copy LIKE original;

이렇게하면 original테이블에있는 모든 인덱스가 생성됩니다 .

mysql에서 이런 식으로 작동합니다 5.1.39.


답변

인덱스보존하면서 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;

(댓글에서 지적했듯이.)


답변

로부터 수동 :

“CREATE TABLE … SELECT는 자동으로 인덱스를 생성하지 않습니다. 이는 명령문을 최대한 유연하게 만들기 위해 의도적으로 수행됩니다. 생성 된 테이블에 인덱스를 포함하려면 SELECT 문 앞에 다음을 지정해야합니다.”

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

당신은 모두에 인덱스 및 데이터 유형 (데이터 타입 변환을 피하기 위해)를 지정할 수 있습니다 CREATE TABLE LIKECREATE TABLE SELECT. 어느 것이 더 빠른지 설정에 따라 다릅니다.


답변

인덱스 및 트리거를 사용하여 복사하려면 다음 두 쿼리를 수행하십시오.

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

구조와 데이터 만 복사하려면 다음을 사용하십시오.

CREATE TABLE tbl_new AS SELECT * FROM tbl_old;


답변

create table mynewtable (select * from myoldtable)mysql 에서 작동 합니까 ? 그렇다면 당신도 시도 할 수 있습니다.


답변

구조와 모든 항목을 한 테이블에서 다른 테이블로 복사하는 가장 좋은 방법은 다음 쿼리입니다.

CREATE TABLE new_table LIKE old_table; INSERT new_table SELECT * FROM old_table;


답변

을 시도 SELECT INTO하고 변수 를 중개자로 사용 하십시오 .

먼저 원본 테이블과 동일한 구조를 갖도록 수신 테이블을 만들어야합니다.

가장 좋은 점은 내부이기 때문에 빠르다는 것입니다. 그래도 색인을 잃게됩니다.