1. 程式人生 > >大表中大量資料更新問題

大表中大量資料更新問題

最近遇到個大批量資料更新表字段問題,需要將A表中m欄位儲存的字串進行某種統一格式的替換,where條件類似m like ‘aaa%’。源資料有1700萬條,需要更新的資料有200多萬條。因為所更新的欄位沒有索引,如果用 update set from where m like 'aaa%' 更新時需要鎖表,這在生產環境是不允許的。以下是更新資料的方法。

方法:

1、先建立備份表backup,只有主鍵id欄位。

2、取符合更新條件的top(200000)條資料的主鍵id,插入備份表中。這是全表掃描查詢,不會鎖表。

3、使用 update A set m = 'bbb' from A inner join B on A.id = B.id 來關聯更新目標表資料。因為有關聯主鍵id的更新,所以可以通過索引來掃描表,不會鎖表。

4、刪除備份表中的資料。

重複2,3,4,步驟10次就可以更新完資料。

 

執行時間。

第2步 從1700萬條資料中 like 全表掃描取前200000資料大概需要2,3s時間。

第3步 主鍵id關聯更新大概需要6s時間。

時間上可以接受。