絕對乾貨,4分鐘插入1000萬條資料到mysql資料庫表
轉:https://www.cnblogs.com/fanwencong/p/5765136.html
我用到的資料庫為,mysql資料庫5.7版本的
1.首先自己準備好資料庫表
其實我在插入1000萬條資料的時候遇到了一些問題,現在先來解決他們,一開始我插入100萬條資料時候報錯,控制檯的資訊如下:
com.mysql.jdbc.PacketTooBigException: Packet for query is too large (4232009 > 4194304). You can change this value on the server by setting the max_allowed_packet’ variable.
出現上面的錯誤是因為資料庫表的 max_allowed_packet這個配置沒配置足夠大,因為預設的為4M的,後來我調為100M就沒報錯了
set global max_allowed_packet = 100*1024*1024* 記住,設定好後重新登入資料庫才能看的設定後的值
show VARIABLES like '%max_allowed_packet%'
Java的jdbc程式碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
|
結果:
哈哈,1000萬條資料288秒完成,是不是感覺超級牛逼,我每次插入10萬條資料就提交一次事務,如果是一條一條差的話估計要好幾個小時,網上有人試過時間浪費在資料庫的連線上了,
後來我想測試插入100萬條資料時候資料庫引擎的差別
首先把程式碼中最外層的迴圈i=100改為i=10;
1.資料庫引擎為MyISAM時:27s,這個我忘了截圖了。因為我後來測試InnoDB的時候我換了一個表來測試,因為我發現改不了資料庫表的引擎。。。。所以只能換一個表來測試
1.資料庫引擎為InnoDB時:
用了77秒,比MyISAW慢了3倍左右,估計要是1000萬條資料的時候更慢吧。。。