2011-06-15 50 views
1

我每個人,MYSQL 100000更新

我必須更新大約100000字段在我的分貝與文件。 所以我有這樣一個文件:

update db set field='truc0' where id='0' 
update db set field='truc1' where id='1' 
... 
update db set field='trucn' where id='n' 

我解析文件和每行我將請求發送到我的分貝

但我的問題是,這個過程是緩慢的極端。 例如,我已經開始的過程和 2%= 2064個=請求900seconds

你知道另一個進程做同樣的事情,但在一個更好的時間?

THX很多關於你的答案

+0

是否要更新表或子集中的所有記錄? – 2011-06-15 14:35:30

+0

'id'字段中是否有索引?如果沒有,每次更新都需要全表掃描,所以你會處理n * 100,000行。 – 2011-06-15 16:33:30

回答

6

像這樣的事情一定會去得更快,因爲它是一個單一的查詢,而不是N次查詢:

update db set field='truc' + cast(id as varchar) 
0

從你的問題是不是如果你想要的是明確更新數據庫中的所有行或者只是從文件中讀取的特殊ID。

在後一種情況下,嘗試從文件中讀取塊並將ID分組在一起。 例如。如果一個文件塊包含的ID 3 4 5 6 7 8可優化查詢

update db set field=.... where id between 3 and 8; 

(小心,如​​果你使用VARCHAR鍵而不是整數,但!)

如果ID是隨機的,你可能還是通過使用SQL「IN」子句獲得性能提升

update db set field=... where id in ('18','49','72','30','187');