mysql - 如何删除 maria db 中超过 7000 万个元组
问题描述
早上好,我有一个问题,每百万删除记录的最佳方法是什么?
我有一个包含超过 7000 万条记录的表,因此我需要删除 2020 年 12 月 31 日之前的所有记录,我使用此表游标,但它给出了超时错误并且最终不会删除任何元组。
DELIMITER //
CREATE PROCEDURE delOs()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE dbid INT;
DECLARE osCursor CURSOR FOR
SELECT os.DBID FROM object_store os INNER JOIN sync.`transaction` t ON ( t.DBID =
os.`TRANSACTION` )
INNER JOIN sync.transaction_det td ON ( td.`TRANSACTION` = t.DBID )
wHERE DATE(td.`DATE`) <= '2020-12-31';
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN osCursor;
delete_loop: LOOP
FETCH osCursor INTO dbid;
IF done THEN
LEAVE delete_loop;
END IF;
IF(dbid IS NOT null) THEN
DELETE FROM sync.object_store WHERE DBID IN(dbid);
COMMIT;
END IF;
END LOOP;
CLOSE osCursor;
END; //
delimiter ;
有一个更好的方法吗?
解决方案
推荐阅读
- git - 断电后git存储库损坏
- mysql - 为什么聚合函数不允许表中的任何行
- arcgis - 在 ArcGIS 中使用 shapefile 屏蔽栅格数据,然后加权求和
- handlebars.js - 在 SendGrid 模板门户中格式化日期
- javascript - 在依赖下拉列表JS上添加第三个列表
- postgresql - 创建一个高可用和高可用的数据库
- php - 在ajax中自动加载数据如何将其更改为单击按钮
- powerbi - 如何创建自定义度量?
- excel - 如何在最后一个活动工作表之后使用 InputBox 添加工作表?
- css - 设置 Angular 材质滑块的样式,使其更厚/更高