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의 자동 증가 잠금" 을 참조하십시오.InnoDB
FULLTEXT
인덱스에 데이터를로드 할 때 최고의 성능을 위해 다음과 같은 일련의 단계를 따릅니다.테이블 생성시
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
숨기기 열로 추가합니다. 그러나이 방법은 성능에 영향을 테이블 재구성이 필요합니다.