gpt4 book ai didi

sql - 从具有数百万条记录的表中删除

转载 作者:可可西里 更新时间:2023-11-01 06:29:06 27 4
gpt4 key购买 nike

我正在尝试找到一种方法来对包含数百万条记录的 InnoDB 表执行有条件的 DELETE,而不锁定它(因此不会导致网站关闭)。

我试图在 mysql.com 上查找信息,但无济于事。关于如何进行的任何提示?

最佳答案

我认为不加锁是不可能删除的。也就是说,我认为锁定要删除的记录不是问题。问题是锁定其他行。

我在这里找到了关于该主题的一些信息:http://dev.mysql.com/doc/refman/5.0/en/innodb-locks-set.html

我的建议是尝试执行一百万个单行删除。我认为,如果您在单个事务中完成所有这些操作,性能应该不会受到太大影响。所以你会得到类似的东西:

START TRANSACTION;

DELETE FROM tab WHERE id = 1;
..
..
DELETE FROM tab WHERE id = x;

COMMIT;

您可以通过执行类似的操作来生成所需的语句

SELECT CONCAT('DELETE FROM tab WHERE id = ', id)
FROM tab
WHERE <some intricate condition that selects the set you want to delete>

所以这种方法的优势在于:

DELETE FROM tab 
WHERE <some intricate condition that selects the set you want to delete>

在第一种方法中,您只会锁定要删除的记录,而在第二种方法中,您可能会冒着锁定碰巧与要删除的行位于同一范围内的其他记录的风险。

关于sql - 从具有数百万条记录的表中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2257904/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com