程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> 將一個更新劃分為幾個批次

將一個更新劃分為幾個批次

編輯:關於MYSQL數據庫

問:我想以一次5,000行的方式批量更新一個大型表,但我不知道怎樣分割數據。該表不包含增量數字或整數主鍵。怎樣才能在保持良好性能的同時實現數據更新呢?

答:如果知道哪些行尚未被更新,您可以使用簡單的謂詞來排除已更新的行,ROWCOUNT設置可以幫助您批量分割數據。以下的代碼清單說明了如何使用該設置:

SET ROWCOUNT 1000
WHILE (1=1) BEGIN
BEGIN TRANSACTION
UPDATE...set ...,MyLastUpdate='date',...WHERE
MyLastUpdate < 'date'
-- 更新1000未更新行
IF @@ROWCOUNT = 0
BEGIN
COMMIT TRANSACTION
BREAK
END
COMMIT TRANSACTION
END

在指定的行數返回後,ROWCOUNT將使SQL Server停止查詢處理。這項技術很有用,因為它避免了大量更新所致的並發命中;更新中的行數越少,更新任務使其他用戶不能訪問該數據的可能性就越小。結合事務日志備份,這一方法還可以使您的事務日志的大小降至最低。

如果沒有識別已更新行的機制,您可以使用游標遍歷所有數據並提交每個x值。但是,游標占用服務器資源的時間通常要多於基於集合的語句。

—Microsoft SQL Server開發團隊

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved