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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux下使用Ansible處理批量操作Linux
- SpringBatch批量處理策略SpringBAT
- Dynamics 365 Web API 批處理(batch requests)WebAPIBAT
- Spring Batch + JPA 處理 Excel 檔案教程SpringBATExcel
- Python批量處理圖片Python
- Spring Boot 之 Spring Batch 批處理實踐Spring BootBAT
- 批量處理檔名稱(上)
- Spring Batch 基本的批處理指導原則SpringBAT
- 《Spring Batch 權威指南》之“批處理和 Spring”SpringBAT
- 資料共享-spring batch(9)上下文處理SpringBAT
- 使用csv批量匯入、匯出資料的需求處理
- 正規表示式處理批量插入
- React setState合併和批量處理React
- 一文輕鬆搞定批處理框架 Spring Batch框架SpringBAT
- 配置 Spring Batch 批處理失敗重試機制SpringBAT
- Windows使用批處理給手機批量安裝apk檔案WindowsAPK
- 使用Kafka分割槽擴充套件Spring Batch大資料排程批處理 – ArnoldKafka套件SpringBAT大資料
- JavaScript 批量註冊事件處理函式JavaScript事件函式
- PDF Checkpoint for mac(pdf批量處理軟體)Mac
- mysql 1129處理MySql
- 26. 使用MySQL之管理事務處理MySql
- Java後端開發中的任務排程:使用Spring Batch實現批處理Java後端SpringBAT
- 11. 使用MySQL之使用資料處理函式MySql函式
- for迴圈批量註冊事件處理函式事件函式
- JDBC連線批量處理資料入庫JDBC
- MySQL事務處理MySql
- MySQL 併發處理MySql
- MySQL的表碎片處理MySql
- MySQL show processlist故障處理MySql
- Mysql如何處理死鎖MySql
- mysql 8.0忘記root使用者密碼處理MySql密碼
- 利用實體bean物件批量資料傳輸處理Bean物件
- word(2010)使用VBA完成批處理操作-批量清除表格某單元格內容
- Salesforce Integration 概覽(四) Batch Data Synchronization(批量資料的同步)SalesforceBAT
- MySQL 處理重複資料MySql
- 如何用 Golang 的 channel 實現訊息的批量處理Golang
- 【問題處理】MySQL忘記root密碼的處理辦法MySql密碼
- Spring Batch中透過多執行緒和非同步處理提高效能SpringBAT執行緒非同步
- Debezium zookeeper kafka mysql資料處理KafkaMySql