วิธีที่ 1:
รหัสจาวา
คัดลอกรหัสรหัส ดังต่อไปนี้:
conn = DriverManager.getConnection (JDBC_URL, JDBC_USER, JDBC_PASS);
pstmt=conn
.prepareStatement("ใส่เข้าไปในค่า loadtest (id, ข้อมูล) (?, ?)");
สำหรับ (int i = 1; i <= COUNT; i++) {
pstmt.clearParameters();
pstmt.setInt(1, i);
pstmt.setString(2, ข้อมูล);
pstmt.execute();
-
MyISAM: 246.6 วินาที, InnoDB: 360.2 วินาที
วิธีที่ 2: ใช้ธุรกรรมโดยไม่ต้องกระทำโดยอัตโนมัติ
รหัสจาวา
คัดลอกรหัสรหัส ดังต่อไปนี้:
conn = DriverManager.getConnection (JDBC_URL, JDBC_USER, JDBC_PASS);
conn.setAutoCommit(เท็จ);
pstmt=conn
.prepareStatement("ใส่เข้าไปในค่า loadtest (id, ข้อมูล) (?, ?)");
สำหรับ (int i = 1; i <= COUNT; i++) {
pstmt.clearParameters();
pstmt.setInt(1, i);
pstmt.setString(2, ข้อมูล);
pstmt.execute();
ถ้า (ฉัน % COMMIT_SIZE == 0) {
conn.commit();
-
-
conn.commit();
InnoDB: 31.5 วินาที
วิธีที่ 3: ดำเนินการแบทช์
รหัสจาวา
คัดลอกรหัสรหัส ดังต่อไปนี้:
conn = DriverManager.getConnection (JDBC_URL
+ "?rewriteBatchedStatements=true", JDBC_USER, JDBC_PASS);
conn.setAutoCommit(เท็จ);
pstmt=conn
.prepareStatement("ใส่เข้าไปในค่า loadtest (id, ข้อมูล) (?, ?)");
สำหรับ (int i = 1; i <= COUNT; i += BATCH_SIZE) {
pstmt.clearBatch();
สำหรับ (int j = 0; j < BATCH_SIZE; j ++) {
pstmt.setInt(1, ฉัน + เจ);
pstmt.setString(2, ข้อมูล);
pstmt.addBatch();
-
pstmt.executeBatch();
ถ้า ((i + BATCH_SIZE - 1) % COMMIT_SIZE == 0) {
conn.commit();
-
-
conn.commit();
InnoDB: 5.2 วินาที
ต้องใช้ที่กล่าวมาข้างต้น
1) เขียน BatchedStatements ใหม่ = true
2) ใช้ServerPrepStmts=true
วิธีที่ 4: โหลดก่อนแล้วจึง COMMIT
รหัสจาวา
คัดลอกรหัสรหัส ดังต่อไปนี้:
conn = DriverManager.getConnection (JDBC_URL, JDBC_USER, JDBC_PASS);
conn.setAutoCommit(เท็จ);
pstmt = conn.prepareStatement("โหลดข้อมูล infile ในเครื่อง '' "
+ "ลงในช่องทดสอบโหลดของตารางที่สิ้นสุดโดย ','");
StringBuilder sb = StringBuilder ใหม่ ();
สำหรับ (int i = 1; i <= COUNT; i++) {
sb.ผนวก(i + "," + ข้อมูล + "/n");
ถ้า (ฉัน % COMMIT_SIZE == 0) {
InputStream คือ = ใหม่ ByteArrayInputStream(sb.toString()
.getBytes());
((com.mysql.jdbc.Statement) pstmt)
.setLocalInfileInputStream(คือ);
pstmt.execute();
conn.commit();
sb.setLength(0);
-
-
InputStream คือ = new ByteArrayInputStream(sb.toString().getBytes());
((com.mysql.jdbc.Statement) pstmt).setLocalInfileInputStream(คือ);
pstmt.execute();
conn.commit();