2011-08-16 3 views
4

내 SQL 테이블에 한 번에 더 많은 행을 삽입하고 싶습니다. 나는 그것을하는 가장 좋은 방법은 무엇인지 알고 싶습니다.배치 SQL 삽입은 MySQL 최적화에 좋은 방법입니까?

1.) 대신의 데이터 삽입

INSERT INTO message (email, txt) VALUES ('[email protected]', 'txt1'); 
INSERT INTO message (email, txt) VALUES ('[email protected]', 'txt2'); 
INSERT INTO message (email, txt) VALUES ('[email protected]', 'txt3'); 

2의 각 부분에 대한 INSERT 문을 사용) 또는 대량을 사용합니까?

INSERT INTO message (email, txt) VALUES ('[email protected]', 'txt1'),('[email protected]', 'txt2'),('[email protected]', 'txt3'); 

우리는 INSERT 당 10 개의 데이터 조각에 대해 이야기하고 있습니다. 최적화 관점에서 어느 것이 더 낫습니까?

은 BTW : TXT는

사전에 조언을 주셔서 감사합니다 텍스트 형식 열

입니다!

Jakub

답변

3

이것은 트랜잭션 동작과 mysql 서버의 대기 시간에 따라 다릅니다.

일반적으로 예, 복수 행 삽입이 좋습니다. 그러나 최대 패킷 크기 (select @@max_allowed_packet)로 실행되지 않도록주의하십시오.

자동 트랜잭션이 켜져 있어도 여러 행 삽입이 단일 트랜잭션으로 완료됩니다. 이렇게하면 트랜잭션 로그에 동기화되는 횟수가 줄어들어 삽입 성능이 향상 될 수 있습니다. 이것은 innodb_flush_log_at_trx_commit = 1으로 가정합니다. 데이터를 신경 쓰는 경우라면 그렇게해야합니다!

5

작은 데이터 세트의 경우에는별로 중요하지 않습니다. 그러나 일반적으로 대량 삽입물은 더 빠릅니다.

+0

OP는 MySQL, 귀하의 링크는 오라클에 대한 것입니다; 그들에게 이해가되지 않을 수도 있습니다. – MarkR

+0

@markr right, 링크를 제거했습니다 ... mysql에 대한 벤치 마크를 찾으려고합니다 ... – hvgotcodes

0

SQL 대량 삽입을 고려해야한다고 생각합니다. http://msdn.microsoft.com/en-us/library/ms188365.aspx

트리거를 사용할 때주의하십시오. 대량 작업을 처리하도록 작성해야합니다.

제안 된 BatchSize는 배치 당 75 만 행입니다. 당신이 대량을 사용할 때 그래서 : 인덱스를 사용하고 테이블을 해제 :

  • 테이블
  • 안 일시적으로 인덱스
  • 실행 배치 끝에
  • 에서 대량 삽입을 잠급니다.