1. 程式人生 > >MySql 中 一次update更新多條資料

MySql 中 一次update更新多條資料

我最近遇到一個匯入Excel表中資料到資料庫的需求,資料量一萬多條。需先查詢資料庫中是否存在要插入的資料,若存在則更新資料,否則插入資料。我首先按照常規思路先查詢,然後插入或更新。然而nginx返回 504 time out 錯誤。顯然,資料庫操作消耗了太多的時間。經測試,該操作消耗了300多秒時間。

顯然,資料庫需要做一些優化。我首先想到給要查詢的欄位加索引。經測試加索引後測試,完成一次操作耗時50秒左右,勉強可以接受。將程式碼部署到伺服器測試發現耗時高達200秒左右。

在資料庫操作中,時間很大一部分消耗在了資料庫連結,提交等操作上。儘量減少這些操作,能在很大程度上提高資料庫操作的執行效率。

我首先想到批量插入資料,通過一次性插入若干條資料。減少不必要的操作,達到節約時間的目的。

然後我就想,能不能做到批量更新資料呢?我們知道Mysql並沒有提供原生的批量更新方法。但並不意味沒有方法能實現。在網上我找到下面這種方法
UPDATE mytable 
SET myfield = CASE other_field 
WHEN 1 THEN 'value' 
WHEN 2 THEN 'value' 
WHEN 3 THEN 'value' 
END 
WHERE id IN (1,2,3) 
我通過字串拼接的方法,一次對30條資料執行更新操作。經測試,執行時間達到14秒。部署到伺服器測試,21秒也完成了操作。

本方法親測可用,就是拼接字串有點麻煩。希望對你有所幫助。

我用python封裝了一個工具,你只需傳入資料的陣列,就會自動將已存在的資料做批量更新,新的資料做批量插入。這是它的地址:python封裝一個效率極高的 批量更新、插入合一的工具


.
.
.
.
.
.

.
.
.

.
.
.

.
.
.