首页 > 解决方案 > 如何删除 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 ;

有一个更好的方法吗?

标签: mysqlsqlmariadb

解决方案


推荐阅读