批量插入資料之程式優化

2021-06-18 17:37:34 字數 1101 閱讀 9056

最近遇到乙個問題:我的程式需要向某張表中匯入一萬條資料,如何提高其效率?

在**層面,下面兩種方式是比較常見的:

使用statement物件

使用preparedstatement物件

執行插入的**如下:

public void insertbystatement(string username,string password)

} catch (sqlexception e) finally

} public void insertbypreparedstatement(string username,string password)

ps.executebatch();

} catch (sqlexception e) finally

}

下面分為單執行緒和多執行緒兩種思路來測試:

單執行緒情況:

使用statement耗時218s。

try 

conn.commit();

} catch (sqlexception e) catch (sqlexception e1)

}

使用preparedstatement批處理耗時8s。

try  catch (sqlexception e)  catch (sqlexception e1) 

}

多執行緒(4個執行緒,每個執行緒插入2500條)情況下:

使用statement耗時61s,本文略去**。

使用preparedstatement批處理耗時4s,**如下:

try  catch (sqlexception e)  catch (sqlexception e1) 

}

本文僅僅在**層面做了優化,可以看出,在一次性大量地插入資料時,preparedstatement物件的executebatch()和多執行緒的效率是比較好的。

MySQL優化之海量資料批量插入

問 為何對同乙個表的插入多執行緒會比單執行緒快?同一時間對乙個表的寫操作不應該是獨佔的嗎?答 在資料裡做插入操作的時候,整體時間的分配是這樣的 鏈結耗時 30 傳送query到伺服器 20 解析query 20 插入操作 10 詞條數目 插入index 10 index的數目 關閉鏈結 10 從這裡...

jdbc 批量插入優化

專案中有乙個大資料插入的功能是通過jdbc的批處理實現的,但效率一直不理想。最近研究了一下,做如下總結 1 如果id使用的是uuid,一定要保證有序。因為通常資料庫會為主鍵建立聚集索引。而聚集索引是用來指明資料排序規則的。所以,對於非有序的id,插入的同時會做大量的排序操作,很影響效率。另外,我們在...

PHP MySQL批量插入資料的優化方法

mysql批量插入資料的優化方法,廢話少說直接貼 link mysql connect localhost root or die mysql error mysql select db phone link or die mysql error mysql query set names gbk ...