我需要更新有超過1000萬行的表(生產)。在開始時,將添加3個新聞列col1, col2, col3。這3個新聞列將有基于其他列prev_col1, prev_col2, prev_col3的默認值。舊的和新的列是var char列,最大長度為10,其中一些可能為空。我問的是大概需要多少時間,因為我從來沒有一次更新過這么多行。
我是否應該使用簡單的更新:
UPDATE table_name SET col1=prev_col1。col2=prev_col2, col3=prev_col3;
或者是否有其他有效的方法來更新大量的行?
uj5u.com熱心網友回復:
有效的更新方式是使用MySQL Join-Buffer-Size來更新大量的行。 例如:
SET join_buffer_size = 1024 * 1024 * 42;
UPDATE table1 a JOIN table2 b
ON a.field1 = b.field1
SET
a.field2 = b.field2。
a.field3 = b.field3。
a.field4 = b.field4。
mysql> SET GLOBAL join_buffer_size = 1024 * 1024 * 42;
也許這可以提供一些幫助:- update 10-million-rows-in-mysql-single-table-as-fast-possible
uj5u.com熱心網友回復:
你可以使用一個事務來 "測驗 "運行你的查詢。但是請不要直接在生產中運行,總是在一個克隆的版本中作業,直到你100%確定你在做什么。
START TRANSACTION;
UPDATE table_name SET col1 = prev_col1, col2 = prev_col2, col3= prev_col3;
ROLLBACK。
這將運行查詢,但不是提交,而是回滾。在你使用的控制臺或GUI中,會告訴你錯誤和時間。
uj5u.com熱心網友回復:
執行時間一般不能被計算。它取決于你的服務器存盤資料的方式(堆、樹......)以及你的硬碟或固態硬碟的讀/寫速度。
我在大學的教授曾經說過,你可以在SQL-Server-Activity-Monitor中找到這些資訊。我們從未嘗試過,但我確信你可以找到一些如何使用它的教程。
或者你可以試試@Jelle的方法。這是一個相當安全的方法。但我建議在晚上或在服務器不常用的時候這樣做。
還有一個資訊--你不應該關心你的sql請求的性能--ms sql服務器有一個相當不錯的優化內置。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/324199.html
標籤:
