數十萬條資料如何快速插入資料庫中

2021-10-08 14:38:06 字數 692 閱讀 8848

引言:這幾天工作這邊同事遇到了乙個問題,對十五萬條資料進行計算,插入資料庫的時候耗時很嚴重,使用了批量插入對十五萬條資料插入仍然耗費了30秒,前面計算也耗費了二十多秒,系統流暢度因此很難堪。經過我的排查發現主要是兩個點需要優化。

1)計算的演算法冗餘,優化前23秒計算完成,優化後0.8秒完成計算(由於業務特殊、保密不方便透露)

2)十五萬條資料批量插入資料庫時耗費了30秒,優化後3秒。(已達到業務要求範圍內,所以不再繼續其他細節優化)

批量插入基於的是mybatisplus 的service的insertbatch方法

優化思路:

使用執行緒池+任務分派器將15萬條資料平均分派給執行緒池中16個執行緒去處理

儲存所有資料的集合為list

執行緒池使用的fixedthreadpool,因為機器是四核8執行緒,所以我執行緒池裡放的16個執行緒。

1、建立執行緒池

executorservice es = executors.newfixedthreadpool(16);
2、任務分派器

其實就是乙個函式,負責分派要插入的資料集合,遍歷0到(執行緒數-1),然後將集合中所有資料平均分配到每乙個執行緒(資料數量%執行緒數=餘數,餘下的幾個資料的插入工作直接分配給最後乙個執行緒去)

經過分配後每個執行緒負責1萬條資料的插入

16個執行緒同時跑,由原來的30秒跑完,變成了3秒鐘。

SQL SERVER 快速插入千萬條資料

1.正常插入 插入非常慢。declare count int 10000000,index int 0 begin tran while index count begin insert into ordertest id values round rand 10000000,0 set index...

如何利用jdbc快速插入百萬條資料

當須要向資料庫插入百萬條資料時,利用hibernate,mybatis等持久層框架時耗時較久,此時使用jdbc插入效率會更高。此種場景特別適用於讀取檔案匯入到資料庫。可以利用批處理來加快jdbc的插入效率。string sql insert into person id,name values co...

資料庫 一次插入幾萬條資料

最近做了乙個功能,操作的資料量特別大,一次往資料庫 插入上萬條資料。我用了 迴圈新增,和ef封裝的新增功能。兩次方式速度都非常慢,一萬條資料要幾分鐘。在網上 查詢資料後,可以建立乙個datatable物件,然後把資料都賦值給這個datatable物件的列。然後copy到資料庫就行了。下面這段 是 例...