更新時間:2020-04-01 13:50:12 來源:動力節(jié)點 瀏覽2331次
在處理一些與數(shù)據(jù)庫相關(guān)的操作的時候,通常把一些操作合并能夠起到優(yōu)化的效果,并且數(shù)量越大,批量執(zhí)行的效率比一條一條執(zhí)行的效率要快的多。
批量插入比單次插入快
比如有十條數(shù)據(jù)單條執(zhí)行需要操作十次數(shù)據(jù)庫,批量的話執(zhí)行一次數(shù)據(jù)庫的操作就可以。
對應(yīng)的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直接去數(shù)據(jù)庫執(zhí)行做一下對比,在數(shù)據(jù)庫越大的時候,他們的速度對比越明顯。
我原來做過sql數(shù)據(jù)導(dǎo)入,同樣的數(shù)據(jù)不同的sql,單次插入的執(zhí)行了800s,分批的50s內(nèi)完成。這只是一個大概的印象,大家可以自己做嘗試。
批量插入的缺陷
優(yōu)點是可以一次性插入很多條數(shù)據(jù),但是缺點也有,這個很多條數(shù)據(jù)是有限制的,不能無限大,數(shù)據(jù)庫太多的話數(shù)據(jù)庫直接報錯,導(dǎo)入執(zhí)行失敗,我記得提示的是(這條sql執(zhí)行數(shù)據(jù)大于2M,無法執(zhí)行),大概這樣的提示。
所以為了效率,也為了保證程序的正常執(zhí)行,就需要分批的批量插入。
比如一次要插入8000條數(shù)據(jù),數(shù)據(jù)庫受不了,那就一次插入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(); } } }
總結(jié):優(yōu)化既要保證效率,更要注重正確性。
以上就是動力節(jié)點java培訓(xùn)機(jī)構(gòu)的小編針對“Java基礎(chǔ)學(xué)習(xí):java批處理教程”的內(nèi)容進(jìn)行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。
相關(guān)閱讀
初級 202925
初級 203221
初級 202629
初級 203743