更新時間:2020-04-01 13:50:12 來源:動力節點 瀏覽2353次
在處理一些與數據庫相關的操作的時候,通常把一些操作合并能夠起到優化的效果,并且數量越大,批量執行的效率比一條一條執行的效率要快的多。
批量插入比單次插入快
比如有十條數據單條執行需要操作十次數據庫,批量的話執行一次數據庫的操作就可以。
對應的sql語句:
單次:INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....);
INSERT INTO table_name (列1, 列2,...) VALUES (值3, 值4,....);
批量:INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....),(值3, 值4,....);
大家可以用sql直接去數據庫執行做一下對比,在數據庫越大的時候,他們的速度對比越明顯。
我原來做過sql數據導入,同樣的數據不同的sql,單次插入的執行了800s,分批的50s內完成。這只是一個大概的印象,大家可以自己做嘗試。
批量插入的缺陷
優點是可以一次性插入很多條數據,但是缺點也有,這個很多條數據是有限制的,不能無限大,數據庫太多的話數據庫直接報錯,導入執行失敗,我記得提示的是(這條sql執行數據大于2M,無法執行),大概這樣的提示。
所以為了效率,也為了保證程序的正常執行,就需要分批的批量插入。
比如一次要插入8000條數據,數據庫受不了,那就一次插入500條。
分批代碼
//分批處理 if (CollectionUtils.isNotEmpty(allList)) { int pointsDataLimit = 500;//定義分批大小 List newList = new ArrayList(); for (int i = 0; i < allList.size(); i++) {//分批次處理 newList.add(allList.get(i)); if (pointsDataLimit == newList.size() || i == allList.size() - 1) { userDao.insertAllBy(newList);//批量插入 newList.clear(); } } }
總結:優化既要保證效率,更要注重正確性。
以上就是動力節點java培訓機構的小編針對“Java基礎學習:java批處理教程”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習