假設有乙個表(syslogs)有1000萬條記錄,需要在業務不停止的情況下刪除其中statusid=1的所有記錄,差不多有600萬條, 直接執行 delete from syslogs where statusid=1 會發現刪除失敗,因為lock wait timeout exceed的錯誤。
因為這條語句所涉及的記錄數太多,因此我們通過limit引數分批刪除,比如每10000條進行一次刪除,那麼我們可以利用 mysql這樣的語句來完成:
delete from syslogs where status=1 order by statusid limit 10000;
然後分多次執行就可以把這些記錄成功刪除。
執行大批量刪除的時候注意要使用上limit。因為如果不用limit,刪除大量資料很有可能造成死鎖。
如果delete的where語句不在索引上,可以先找主鍵,然後根據主鍵刪除資料庫。
平時update和delete的時候最好也加上limit 1 來防止誤操作。
再分享一下我老師大神的人工智慧教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!
假設有乙個表(syslogs)有1000萬條記錄,需要在業務不停止的情況下刪除其中statusid=1的所有記錄,差不多有600萬條, 直接執行 delete from syslogs where statusid=1 會發現刪除失敗,因為lock wait timeout exceed的錯誤。
因為這條語句所涉及的記錄數太多,因此我們通過limit引數分批刪除,比如每10000條進行一次刪除,那麼我們可以利用 mysql這樣的語句來完成:
delete from syslogs where status=1 order by statusid limit 10000;
然後分多次執行就可以把這些記錄成功刪除。
執行大批量刪除的時候注意要使用上limit。因為如果不用limit,刪除大量資料很有可能造成死鎖。
如果delete的where語句不在索引上,可以先找主鍵,然後根據主鍵刪除資料庫。
平時update和delete的時候最好也加上limit 1 來防止誤操作。
mysql高階 十五 mysql批量刪除大量資料
假設有乙個表 syslogs 有1000萬條記錄,需要在業務不停止的情況下刪除其中statusid 1的所有記錄,差不多有600萬條,直接執行 delete from syslogs where statusid 1 會發現刪除失敗,因為lock wait timeout exceed的錯誤。因為這...
mysql批模式 MySQL 批量模式
peter 什麼是批量模式 從檔案中讀取標準sql 命令 通過互動模式進行詢問 為什麼需要使用批量模式 重複進行相同詢問 可以通過管道,詳細查詢返回結果 可以把查詢結果輸出到檔案中 可以很方便把指令碼分配給其他使用者 cron job 以批量模式建立表單 mysql create table my ...
mysql 高階 mysql高階知識
一.儲存引擎 引擎 指的是乙個系統的核心部分 引擎有不同分類是為了適應不同的使用場景 檢視mysql支援所有引擎 show engines mrg myisam 是一堆myisam表的集合 用於做水平分表,如果乙個表中資料量太大 將導致效率降低 水平分表就是把整個大表拆成不同的小表,每一次查詢 會判...