방법 1:
자바 코드
다음과 같이 코드 코드를 복사합니다 .
conn = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASS);
pstmt=콘
.prepareStatement("loadtest (id, data) 값에 삽입 (?, ?)");
for (int i = 1; i <= COUNT; i++) {
pstmt.clearParameters();
pstmt.setInt(1, i);
pstmt.setString(2, DATA);
pstmt.execute();
}
MyISAM: 246.6초, InnoDB: 360.2초
방법 2: 자동 커밋 없이 트랜잭션 사용
자바 코드
다음과 같이 코드 코드를 복사합니다 .
conn = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASS);
conn.setAutoCommit(false);
pstmt=콘
.prepareStatement("loadtest (id, data) 값에 삽입 (?, ?)");
for (int i = 1; i <= COUNT; i++) {
pstmt.clearParameters();
pstmt.setInt(1, i);
pstmt.setString(2, DATA);
pstmt.execute();
if (i % COMMIT_SIZE == 0) {
conn.commit();
}
}
conn.commit();
InnoDB: 31.5초
방법 3: ExecuteBatch
자바 코드
다음과 같이 코드 코드를 복사합니다 .
conn = DriverManager.getConnection(JDBC_URL)
+ "?rewriteBatchedStatements=true", JDBC_USER, JDBC_PASS);
conn.setAutoCommit(false);
pstmt=콘
.prepareStatement("loadtest (id, data) 값에 삽입 (?, ?)");
for (int i = 1; i <= COUNT; i += BATCH_SIZE) {
pstmt.clearBatch();
for (int j = 0; j < BATCH_SIZE; j++) {
pstmt.setInt(1, i + j);
pstmt.setString(2, DATA);
pstmt.addBatch();
}
pstmt.executeBatch();
if ((i + BATCH_SIZE - 1) % COMMIT_SIZE == 0) {
conn.commit();
}
}
conn.commit();
InnoDB: 5.2초
위의 것을 사용해야합니다
1) rewriteBatchedStatements=true
2) useServerPrepStmts=true
방법 4: 먼저 LOAD를 수행한 다음 COMMIT합니다.
자바 코드
다음과 같이 코드 코드를 복사합니다 .
conn = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASS);
conn.setAutoCommit(false);
pstmt = conn.prepareStatement("데이터 로컬 infile 로드 '' "
+ "','로 끝나는 테이블 로드 테스트 필드로");
StringBuilder sb = new StringBuilder();
for (int i = 1; i <= COUNT; i++) {
sb.append(i + "," + DATA + "/n");
if (i % COMMIT_SIZE == 0) {
InputStream은 = new ByteArrayInputStream(sb.toString()입니다.
.getBytes());
((com.mysql.jdbc.Statement) pstmt)
.setLocalInfileInputStream(is);
pstmt.execute();
conn.commit();
sb.setLength(0);
}
}
InputStream은 = new ByteArrayInputStream(sb.toString().getBytes());
((com.mysql.jdbc.Statement) pstmt).setLocalInfileInputStream(is);
pstmt.execute();
conn.commit();