> 데이터 베이스 > MySQL 튜토리얼 > 최대 MySQL 성능을 위해 JDBC 일괄 삽입을 어떻게 최적화할 수 있습니까?

최대 MySQL 성능을 위해 JDBC 일괄 삽입을 어떻게 최적화할 수 있습니까?

DDD
풀어 주다: 2024-12-07 13:38:16
원래의
315명이 탐색했습니다.

How Can I Optimize JDBC Batch Inserts for Maximum MySQL Performance?

JDBC 일괄 삽입 성능 최적화

MySQL 데이터베이스에 대용량 데이터를 삽입하려면 최적의 성능을 보장하기 위해 효율적인 일괄 처리가 필요합니다. 한 번에 1백만 개의 레코드를 일괄 삽입하는 것이 합리적으로 보일 수 있지만 이 프로세스를 더욱 최적화하는 기술이 있습니다.

문제 이해

제공된 코드는 준비된 명령문을 사용합니다. 테이블에 값을 삽입하지만 두 개의 키를 활용하지 않습니다. 속성:

  • useServerPrepStmts: false로 설정하면 MySQL은 클라이언트 대신 서버에서 명령문을 준비하여 네트워크 오버헤드를 줄입니다.
  • rewriteBatchedStatements: true로 설정하면 MySQL은 일괄 처리된 명령문을 다시 작성하여 보다 효율적인 다중 명령문 실행을 사용합니다. 방법.

연결 최적화

이러한 최적화를 활성화하려면 연결 URL에서 두 속성을 모두 설정하세요.

Connection c = DriverManager.getConnection("jdbc:mysql://host:3306/db?useServerPrepStmts=false&rewriteBatchedStatements=true", "username", "password");
로그인 후 복사

수정된 코드

이러한 최적화가 적용되면 업데이트된 코드는 다음과 같습니다.

try {
    // Disable auto-commit
    c.setAutoCommit(false);

    // Create a prepared statement
    String sql = "INSERT INTO mytable (xxx), VALUES(?)";
    PreparedStatement pstmt = c.prepareStatement(sql);

    Object[] vals=set.toArray();
    for (int i=0; i<vals.length; i++) {
        pstmt.setString(1, vals[i].toString());
        pstmt.addBatch();
    }

    // Execute the batch
    int [] updateCounts = pstmt.executeBatch();
    System.out.append("inserted "+updateCounts.length);
} catch (SQLException e) {
    e.printStackTrace();
}
로그인 후 복사

결론

"useServerPrepStmts" 및 "rewriteBatchedStatements" 속성을 설정하면 일괄 삽입 프로세스가 크게 최적화되어 경과 시간을 줄일 수 있습니다. 대용량 데이터를 삽입하는데 시간이 걸립니다.

위 내용은 최대 MySQL 성능을 위해 JDBC 일괄 삽입을 어떻게 최적화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿