다음 발췌문은 " High Performance MySQL, Second Edition " 책에서 발췌 한 것입니다 .
이것은 훌륭한 책이며 누구에게나 추천합니다.
짧은 대답은 다음과 같습니다.
테이블 크기와 조건에 관계없이 어떤 방법을 선택하든 오래 기다려야 할 것 같습니다.
테이블 변환
하나의 스토리지 엔진에서 다른 스토리지 엔진으로 테이블을 변환하는 방법에는 여러 가지가 있으며, 각 방법마다 장단점이 있습니다.
테이블 변경
mysql> ALTER TABLE mytable ENGINE = Falcon;
이 구문은 모든 스토리지 엔진에 적용되지만 많은 시간이 걸릴 수 있습니다. MySQL은 기존 테이블을 한 행씩 복사하여 새 테이블로 만듭니다. 이 시간 동안 모든 서버의 디스크 I / O 용량을 사용하게되며 변환이 실행되는 동안 원래 테이블이 읽기 잠금 상태가됩니다.
덤프 및 가져 오기
변환 프로세스를보다 강력하게 제어하려면 먼저 mysqldump 유틸리티를 사용하여 테이블을 텍스트 파일로 덤프하도록 선택할 수 있습니다. 테이블을 덤프 한 후에는 덤프 파일을 편집하여 포함 된 CREATE TABLE 문을 조정하면됩니다. 테이블 이름과 유형을 변경하십시오. 유형이 다르더라도 동일한 데이터베이스에 동일한 이름을 가진 두 개의 테이블을 가질 수 없으므로 mysqldump는 기본적으로 CREATE TABLE 전에 DROP TABLE 명령을 작성합니다. 주의하지 않으면 데이터가 손실 될 수 있습니다.
작성 및 선택
세 번째 변환 기술은 첫 번째 메커니즘의 속도와 두 번째 메커니즘의 안전성 사이의 절충입니다. 전체 테이블을 덤프하거나 한 번에 모두 변환하는 대신 새 테이블을 작성하고 다음과 같이 MySQL의 INSERT ... SELECT 구문을 사용하여 채 웁니다.
mysql> CREATE TABLE innodb_table LIKE myisam_table;
mysql> ALTER TABLE innodb_table ENGINE=InnoDB;
mysql> INSERT INTO innodb_table SELECT * FROM myisam_table;
데이터가 많지 않으면 잘 작동하지만, 그렇지 않으면 실행 취소 로그가 크게 커지지 않도록 각 청크 사이에 트랜잭션을 커밋하여 테이블을 점진적으로 채우는 것이 더 효율적입니다. id가 기본 키라고 가정하면 모든 데이터를 새 테이블에 복사 할 때까지이 쿼리를 반복적으로 실행하십시오 (매번 더 큰 x 및 y 값 사용).
mysql> START TRANSACTION;
mysql> INSERT INTO innodb_table SELECT * FROM myisam_table
-> WHERE id BETWEEN x AND y;
mysql> COMMIT;
그렇게 한 후에는 원본 테이블이 남습니다.이 작업을 완료하면 삭제할 수 있고 새 테이블이 채워집니다. 불일치 한 데이터 사본을 얻지 않도록 필요한 경우 원래 테이블을 잠그십시오!