8.5.4 InnoDB 테이블의 대량 데이터로드
이러한 성능 팁 섹션 8.2.2.1 "INSERT 문 속도" 의 빠른 삽입 일반적인 지침을 보완하는 것입니다.
InnoDB데이터를 가져 오는 경우 자동 커밋 모드에서 삽입마다 디스크에 로그의 플래시를 실행하기 위해 그것을 해제합니다. 가져 오기 작업시 자동 실행을 해제하려면 그것을,SET autocommit문과COMMIT문으로 묶습니다.SET autocommit = 0;
... SQL import statements ...COMMIT;mysqldump 옵션
--opt는 그들을SET autocommit문과COMMIT문 사이 않더라도InnoDB테이블에 빠르게 가져올 덤프 파일을 만듭니다.부 키에
UNIQUE제약이있는 경우 가져 오기 세션 동안 고유성 검사를 일시적으로 해제하여 테이블 가져 오기 속도를 높일 수 있습니다.SET unique_checks = 0;
... SQL import statements ...SET unique_checks = 1;큰 테이블의 경우,
InnoDB는 삽입 버퍼를 사용하여 보조 인덱스 레코드를 일괄 적으로 쓸 수 있기 때문에 이로 인해 대량의 디스크 I / O가 절약됩니다. 데이터 중복 키가 포함되어 있지 않은지 확인하십시오.테이블에
FOREIGN KEY제약이있는 경우 가져 오기 세션 사이의 외부 키 체크를 해제하여 테이블 가져 오기 속도를 높일 수 있습니다.SET foreign_key_checks = 0;
... SQL import statements ...SET foreign_key_checks = 1;큰 테이블의 경우, 이렇게하면 디스크 I / O를 줄일 수 있습니다.
많은 행을 삽입 할 필요가있는 경우 여러 행
INSERT구문을 사용하여 클라이언트와 서버 사이의 통신 오버 헤드를 줄일 수 있습니다.INSERT INTO yourtable VALUES (1,2), (5,5), ...;이 팁은
InnoDB테이블뿐만 아니라 모든 테이블에 삽입 유효합니다.자동 증가 열이있는 테이블에 대량 삽입을 실행하는 경우
innodb_autoinc_lock_mode를 기본값 인 1 대신 2로 설정합니다. 자세한 내용은 섹션 14.6.5.2 "구성 가능한 InnoDB의 자동 증가 잠금" 을 참조하십시오.InnoDBFULLTEXT인덱스에 데이터를로드 할 때 최고의 성능을 위해 다음과 같은 일련의 단계를 따릅니다.테이블 생성시
FTS_DOC_ID_INDEX라는 고유 인덱스로, 형태BIGINT UNSIGNED NOT NULL컬럼FTS_DOC_ID을 정의합니다. 예 :CREATE TABLE t1 ( FTS_DOC_ID BIGINT unsigned NOT NULL AUTO_INCREMENT, title varchar (255) NOT NULL DEFAULT " text mediumtext NOT NULL, PRIMARY KEY (`FTS_DOC_ID`) ) ENGINE = InnoDB DEFAULT CHARSET = latin1; CREATE UNIQUE INDEX FTS_DOC_ID_INDEX on t1 (FTS_DOC_ID);
테이블에 데이터를로드합니다.
데이터가로드되면
FULLTEXT인덱스를 만듭니다.
참고테이블 생성시
FTS_DOC_ID컬럼을 추가하는 경우FTS_DOC_ID는 각INSERT또는UPDATE따라 단조롭게 증가 될 필요가 있기 때문에FULLTEXT인덱스 설정된 컬럼이 업데이트 된 때FTS_DOC_ID컬럼이 업데이트되는 것을 확인 합니다. 테이블 생성시FTS_DOC_ID를 추가하지 않고InnoDB자동으로 DOC ID를 관리하도록 한 경우,InnoDB는 다음CREATE FULLTEXT INDEX호출에서FTS_DOC_ID숨기기 열로 추가합니다. 그러나이 방법은 성능에 영향을 테이블 재구성이 필요합니다.