在擁有超過 460 萬條記錄的表上,這需要花費數小時的時間。
有沒有辦法加快這個速度?
UPDATE tableA
SET SKU = CONCAT("X-", tableA.supplier_SKU);
目前還沒有任何列的索引。
EXPLAIN 表示行 = 460 萬,過濾 = 100%!
uj5u.com熱心網友回復:
如果 SKU 上有索引(索引),洗掉它,更新和重新創建可能會有所幫助。
您能否先鎖定表(確保沒有其他用戶阻止您的操作)?
lock tables tableA write;
?
您可以創建另一個表,在那里更新然后重命名嗎?
https://dev.mysql.com/doc/refman/5.7/en/rename-table.html
*注意 - 上面的鏈接描述了如何在一個陳述句中交換兩個表。
460 萬條記錄聽起來不像需要幾個小時,除非您無法鎖定表,因為其他用戶一直在更新它。
uj5u.com熱心網友回復:
請提供SHOW CREATE TABLE tableA。
緩慢的部分是在進入“提交”之前需要保存 460 萬個“舊”行。
永遠不要LOCK TABLES與 InnoDB 一起使用。
您可以將任務分解為多個塊,以減少其他操作的阻塞。(但總時間可能會更長。)參見“分塊”:http : //mysql.rjweb.org/doc.php/deletebig#deleting_in_chunks
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/338983.html
