2011-08-18 1 views
2

나는 Myisam 테이블을 다루는 데 익숙했지만, 외부 연결에 대해서는 Innodb 테이블 (변환 및 외래 키 추가)으로 변경했습니다. 나는 종종 서버에서 데이터베이스를 다운로드하고 localhost를 채 웁니다. 그것이 myisam 테이블 일 때, 그것은 지옥처럼 빠르곤했습니다. 하지만 이제는 30 분 이상이 걸립니다 ... 레코드를 삽입하기 전에 검사를해야한다는 것을 알고 있지만 외래 키 검사를 비활성화했습니다. 일부 줄은 :InnoDB 테이블 복원 : 매우 느린가?

SET FOREIGN_KEY_CHECKS=0; 
DROP TABLE IF EXISTS t1; 
CREATE TABLE `t1` ( `ID` int(10) unsigned NOT NULL auto_increment, `NAME` varchar(255) NOT NULL default '', PRIMARY KEY (`ID`), UNIQUE KEY `Index_2` (`NAME`)) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8; 
TRUNCATE TABLE t1; 

모든 테이블을 삭제/생성/자릅니다. 그런 다음 INSERT, INSERT ... 더 빨리 만드는 법?

답변

2

mysqldump을 사용한다고 가정하면 --extended-insert을 사용하십시오. 이것은 여러 행의 삽입을 하나의 명령문으로 결합합니다.

--disable-keys 옵션을 사용해보십시오. 이렇게하면 외래 키 검사가 비활성화 될뿐만 아니라 모든 행이 삽입 될 때까지 인덱스 업데이트가 비활성화됩니다. 한 번에 색인을 업데이트하는 것이 일반적으로 훨씬 빠릅니다.

mysqldump을 사용하지 않는 경우 덤프 전에 ALTER TABLE table_name DISABLE KEYS;을 실행하고 각 테이블의 덤프 후 ALTER TABLE table_name ENABLE KEYS;을 실행할 수 있습니다.

그러나 데이터베이스 엔진 전용 백업 도구가 더 빠를 것입니다. 시도하십시오 XtraBackup.

+0

내 외부 코드가 아닙니다. ok 시도해보십시오. – user893856

+0

로컬 데이터베이스의 복사본을 덤프하는 경우 모두 자신의 도구를 구축하지 않는 것이 좋습니다. 이를위한 많은 기존 도구가 있습니다. –

+0

이것이 도움이되는지 여부는 색인 생성의 복잡도에 따라 다릅니다. 경우에 따라 차이가 없습니다. XtraBackup을 적극 권장합니다. 백업 프로세스 및 복원 프로세스는 대개 SQL을로드하는 대신 파일을 복사하는 것으로 나타납니다 (일부 마술을 사용하여 데이터가 일관성이 있는지 확인). –