我需要更新大量的行,如100,000。 可能有一個查詢對服務器來說太重了。Sql更新大量的行
拆分更新的最佳方法是什麼? 喜歡的東西更新200行,睡了一秒鐘,然後又200
編輯:
好,我得到了一個答案,這將是好做的一個查詢。 但我仍然想知道如何做到這一點。 假設我有1,000,000行或更多。 什麼是分割查詢的最佳方式?
我需要更新大量的行,如100,000。 可能有一個查詢對服務器來說太重了。Sql更新大量的行
拆分更新的最佳方法是什麼? 喜歡的東西更新200行,睡了一秒鐘,然後又200
編輯:
好,我得到了一個答案,這將是好做的一個查詢。 但我仍然想知道如何做到這一點。 假設我有1,000,000行或更多。 什麼是分割查詢的最佳方式?
使用從限制和ORDER BY組合ASC last_updated_time ...
有些事情是如此...如果你想將其設置爲1000
UPDATE table SET ..... ORDER BY last_updated_time ASC LIMIT 5000
5000更新通常都不太havy ..。
除非存在您沒有告訴我們的限制,否則在一個查詢中更新全部內容是最佳解決方案。
因爲重載服務器而分裂東西的想法似乎沒有實際用處。想想你自己的解決方案和數字。如果您有一百萬個數據集,並且您嘗試一次更新200個數據集,然後睡一秒,那麼您最終將執行5000次更新並花費83.3分鐘等待服務器完成此任務,而不計算所花費的時間執行查詢,這可能非常快。
本質上,您會知道或選擇數據庫中的所有ID,並通過使用帶有UPDATE的相應WHERE子句爲它們或組中的每個組發送查詢。
除非我們更多地瞭解這個場景,否則這個問題是無法回答的。它處理的是針對個人使用模式優化的東西,並且沒有解決方案可以在任何地方應用。
如果您無法在一個查詢中執行100k行更新,我會升級您的服務器。您一次嘗試更新多少個字段?如果數量巨大,則可能需要重新考慮模式。 – Tony
你認爲更新100K行對於服務器來說太重了,你有什麼基礎? – Xint0
更新應該是原子的。如果數據在睡眠期間發生變化怎麼辦? –