加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 从包含数百万条记录的表中删除

发布时间:2020-12-12 06:27:32 所属栏目:MsSql教程 来源:网络整理
导读:我试图找到一种方法在InnoDB表上进行条件DELETE,其中包含数百万条记录,而不会锁定它(因此不会使网站失效). 我试图在mysql.com上找到信息,但无济于事.关于如何进行的任何提示? 解决方法 我不认为没有锁定就可以删除.也就是说,我不认为锁定您要删除的记录是一
我试图找到一种方法在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>

在第一种方法中,您只能锁定要删除的记录,而在第二种方法中,您可能会遇到锁定其他记录的风险,这些记录恰好与您要删除的行在同一范围内.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读