MySQL使用Batch批量處理
使用MySQL的Batch批量處理,
JDBC驅動版本需要5.1.13或以上
測試使用的JDBC驅動版本:mysql-connector-java-5.1.30-bin
測試表結構如下:
CREATE TABLE test (
id int(11) DEFAULT NULL,
name varchar(20) DEFAULT NULL
) ENGINE=InnoDB
首先使用普通的方式插入100萬條資料,使用時間81948毫秒
程式如下:
使用批量處理,僅用7189毫秒,提升效果非常明顯。
程式如下:
與Oracle不同的是,需要新增下面的引數,才可以使用批量處理,否則還是使用逐條處理的方式。
rewriteBatchedStatements=true
開啟MySQL的查詢日誌general_log,發現如下SQL
INSERT INTO test
VALUES (11, 'test'), (12, 'test'), (13, 'test')......
相對Oracle的批量處理,MySQL需要JDBC引數顯式開啟,並且對於JDBC驅動的版本也有要求。
JDBC驅動版本需要5.1.13或以上
測試使用的JDBC驅動版本:mysql-connector-java-5.1.30-bin
測試表結構如下:
CREATE TABLE test (
id int(11) DEFAULT NULL,
name varchar(20) DEFAULT NULL
) ENGINE=InnoDB
首先使用普通的方式插入100萬條資料,使用時間81948毫秒
程式如下:
-
public class Test {
-
public static void main(String[] args) throws ClassNotFoundException,
-
SQLException {
-
long start = System.currentTimeMillis();
-
Class.forName("com.mysql.jdbc.Driver");
-
Connection connection = DriverManager
-
.getConnection(
-
"jdbc:mysql://127.0.0.1:3306/xx",
-
"xx", "xx");
-
-
connection.setAutoCommit(false);
-
PreparedStatement cmd = connection
-
.prepareStatement("insert into test values(?,?)");
-
-
for (int i = 0; i < 1000000; i++) {
-
cmd.setInt(1, i);
-
cmd.setString(2, "test");
-
cmd.executeUpdate();
-
}
-
connection.commit();
-
-
cmd.close();
-
connection.close();
-
-
long end = System.currentTimeMillis();
-
System.out.println(end - start);
-
}
- }
程式如下:
-
public class Test {
-
public static void main(String[] args) throws ClassNotFoundException,
-
SQLException {
-
long start = System.currentTimeMillis();
-
Class.forName("com.mysql.jdbc.Driver");
-
Connection connection = DriverManager
-
.getConnection(
-
"jdbc:mysql://127.0.0.1:3306/xx?rewriteBatchedStatements=true",
-
"xx", "xx");
-
-
connection.setAutoCommit(false);
-
PreparedStatement cmd = connection
-
.prepareStatement("insert into test values(?,?)");
-
-
for (int i = 0; i < 1000000; i++) {
-
cmd.setInt(1, i);
-
cmd.setString(2, "test");
-
cmd.addBatch();
-
if(i%1000==0){
-
cmd.executeBatch();
-
}
-
}
-
cmd.executeBatch();
-
connection.commit();
-
-
cmd.close();
-
connection.close();
-
-
long end = System.currentTimeMillis();
-
System.out.println(end - start);
-
}
- }
rewriteBatchedStatements=true
開啟MySQL的查詢日誌general_log,發現如下SQL
INSERT INTO test
VALUES (11, 'test'), (12, 'test'), (13, 'test')......
相對Oracle的批量處理,MySQL需要JDBC引數顯式開啟,並且對於JDBC驅動的版本也有要求。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1151785/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Dynamics 365 Web API 批處理(batch requests)WebAPIBAT
- MyBatis Batch Update Exception使用foreach批量update出錯MyBatisException
- Linux下使用Ansible處理批量操作Linux
- Python批量處理圖片Python
- SpringBatch批量處理策略SpringBAT
- 批量處理檔名稱(上)
- mac 命令列批量處理照片Mac命令列
- Python 批量處理檔案Python
- 海量資料處理_批量插入
- 海量資料處理_批量更新
- P處理 批量更改檔名
- sap 批量處理異常tRFC
- redis大幅效能提升之使用管道(PipeLine)和批量(Batch)操作RedisBAT
- Spring Boot 之 Spring Batch 批處理實踐Spring BootBAT
- Spring Batch 基本的批處理指導原則SpringBAT
- 資料共享-spring batch(9)上下文處理SpringBAT
- 使用csv批量匯入、匯出資料的需求處理
- React setState合併和批量處理React
- 正規表示式處理批量插入
- 如何批量處理word中的表格
- 《Spring Batch 權威指南》之“批處理和 Spring”SpringBAT
- 配置 Spring Batch 批處理失敗重試機制SpringBAT
- 一文輕鬆搞定批處理框架 Spring Batch框架SpringBAT
- [MYSQL -11]使用函式處理資料MySql函式
- Windows使用批處理給手機批量安裝apk檔案WindowsAPK
- 使用Kafka分割槽擴充套件Spring Batch大資料排程批處理 – ArnoldKafka套件SpringBAT大資料
- JavaScript 批量註冊事件處理函式JavaScript事件函式
- PDF Checkpoint for mac(pdf批量處理軟體)Mac
- Entity Framework中 批量提交 事務處理Framework
- 通過佇列實現批量處理佇列
- MP3資訊批量處理器 2.1.6
- 使用for語句批量註冊事件處理函式程式碼例項事件函式
- for迴圈批量註冊事件處理函式事件函式
- JDBC連線批量處理資料入庫JDBC
- js如何批量註冊事件處理函式JS事件函式
- 批量處理物理備庫出現archive gapHive
- 大批量資料處理操作小記
- MySQL事務處理MySql