MySQL實現批量插入以優化效能的教程
對於一些資料量較大的系統,資料庫面臨的問題除了查詢效率低下,還有就是資料入庫時間長。特別像報表系統,每天花費在資料匯入上的時間可能會長達幾個小時或十幾個小時之久。因此,優化資料庫插入效能是很有意義的。
經過對MySQL innodb的一些效能測試,發現一些可以提高insert效率的方法,供大家參考參考。
1. 一條SQL語句插入多條資料。
常用的插入語句如:
1 2 3 4 |
INSERT
INTO
`insert_table` (`datetime`, `uid`, `content`, `type`) VALUES
( '0' ,
'userid_0' ,
'content_0' ,
0);
INSERT
INTO
`insert_table` (`datetime`, `uid`, `content`, `type`)
VALUES
( '1' ,
'userid_1' ,
'content_1' ,
1);
|
修改成:
1 2 |
INSERT
INTO
`insert_table` (`datetime`, `uid`, `content`, `type`) VALUES
( '0' ,
'userid_0' ,
'content_0' ,
0), ( '1' ,
'userid_1' ,
'content_1' ,
1);
|
修改後的插入操作能夠提高程式的插入效率。這裡第二種SQL執行效率高的主要原因是合併後日志量(MySQL的binlog和innodb的事務讓日誌)減少了,降低日誌刷盤的資料量和頻率,從而提高效率。通過合併SQL語句,同時也能減少SQL語句解析的次數,減少網路傳輸的IO。
這裡提供一些測試對比資料,分別是進行單條資料的匯入與轉化成一條SQL語句進行匯入,分別測試1百、1千、1萬條資料記錄。
2. 在事務中進行插入處理。
把插入修改成:
1 2 3 4 5 6 7 |
START
TRANSACTION ;
INSERT
INTO
`insert_table` (`datetime`, `uid`, `content`, `type`)
VALUES
( '0' ,
'userid_0' ,
|