for loop 로 인서트 일일이 실행하면 비용이 많이 들지 않는가요?
INSERT INTO `테이블` (필드1, 필드2) VALUES ('값1', '값2'),('값1', '값2')...('값1', '값2');
주변에 보니 이런식으로 쿼리 만들어서 한방에 날리라고 말을 하는군요.
mysql 설정 ini 파일에 bulk_insert_buffer_size가 적절하게 설정되어 있는지 확인해야 할것 같은데
기본값은 8388608 (8M) 이라고 하네요. 성능을 위해서 뭔가 조정할 필요가 있어보입니다.
그외에 만약 autocommit 같은 설정값이 존재한다면 false 로 설정하고 마지막에 commit 을 한방에 때려야
속도에 도움이 좀 될 것 같은데요. 해보지 않아서 어떻게 하는지는 모르겠습니다.
http://dev.mysql.com/doc/refman/5.1/en/insert-speed.html
땅주인 님이 쓰신 글 :
: DB : MySQL 5.0
: DB Component: DBExpress
:
: 한꺼번에 넣어야 할 Row가 1000~2000건 정도가 되는데요..
: 통신으로 받은 Raw 데이터(1초당 발생하는 데이터)를 몇 분 정도의 데이터를 한꺼번에 넣어야 하는 상황입니다.
:
: For 루프 돌면서 insert 문장으로 넣으니 시간이 많이 걸리네요.
:
: Row 데이터를 한꺼번에 넣을 수 있는 방법이 있는 지요?
:
: ADO에서
:
: Query->InsertRow();
: ... // 해당 Row에 데이터 넣기
: Query->Post();
:
: 이런 형태로 했던 것 같은데..
:
: DBExpress에서도 이런 형식을 지원하는 지 알고 싶습니다.
: Help에 뒤져봐도 잘 안보여서...
:
: 감사합니다.
|