我必須根據電子郵件更新表中字段的值(250 000條記錄)和來自另一個表(10 000 000條記錄)的字段值...Mysql更新查詢超過1000萬條記錄
我已經試過: UPDATE table1的T1,T2表2 SET = t1.country t2.country WHERE t1.email = t2.email
但我得到 「正在執行查詢」 一個永遠。
我應該使用什麼查詢?
感謝
我必須根據電子郵件更新表中字段的值(250 000條記錄)和來自另一個表(10 000 000條記錄)的字段值...Mysql更新查詢超過1000萬條記錄
我已經試過: UPDATE table1的T1,T2表2 SET = t1.country t2.country WHERE t1.email = t2.email
但我得到 「正在執行查詢」 一個永遠。
我應該使用什麼查詢?
感謝
這將是採用JOIN
的好機會。
UPDATE table1 as t1
JOIN table2 t2 ON t1.email = t2.email
SET t1.country = t2.country
它仍然需要一段時間爲您的查詢處理,但它應該減少了大量的時間。
謝謝,但這給了我一個Sql語法錯誤... – 2012-01-13 17:44:13
獅子座,我錯過了'作爲t1'在'更新'部分。丹善意修復它。 – 2012-01-16 13:15:31
我在查詢中看不到明顯的錯誤(並且數據庫在此情況下會產生錯誤)。所以我們正在考慮的問題是加快執行更新。是您的兩個電子郵件字段中的一個索引?如果不是,你可以添加一個索引並重試嗎?例如。 ALTER TABLE table2 ADD INDEX(email)
我也很好奇表現。我並不是很熟悉MySQL,但我希望看到相當於解釋計劃/執行路徑以及成本,索引使用等等。 – Dan 2012-01-13 18:02:31
性能調整非常棘手。它取決於你的硬件,系統負載等。從上面提取「小批量」:你可以嘗試UPDATE table1 t1,table2 t2 SET t1.country = t2.country WHERE t1.email = t2.email LIMIT 10 – 2012-01-13 18:10:01
This將只更新10條記錄。驗證結果。如果有效,您只需等到查詢完成即可。 – 2012-01-13 18:11:46
這是一次性的事情嗎?或者你是否會一遍又一遍地做這個事情,比如說可能是晚上的事情? – davogotland 2012-01-13 17:35:19
是的,這是一次性的東西 – 2012-01-13 17:43:45
我會寫一個小應用程序,慢慢地逐行執行,並通過打印出它已經走了多遠來更新用戶,以便主管可以檢查它是否仍在運行。 – davogotland 2012-01-13 17:45:58