MySQL-mysql删除数据效率快的方法

服务器管理 服务器管理 主题:1035 回复:2217

MySQL-mysql删除数据效率快的方法

泛泛之交 发布于 2017-09-15 字数 179 浏览 1171 回复 3

两个表联合查询后删除数据,把存在B表中的ID记录从A表中删除:

DELETE FROM A WHERE EXISTS (SELECT B.uid FROM B WHERE B.uid = A.uid);

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(3

想挽留 2017-10-18 3 楼

试试下面这两句
DELETE A FROM A, B WHERE A.uid = B.uid
或 DELETE FROM A USING A,B WHERE A.uid = B.uid

瑾兮 2017-10-01 2 楼

试一下这个

DELETE FROM A USING B,A WHERE B.uid = A.uid;

1、也可以通过拆分提高速度
把一个sql分成多份可以使每个语句都很有效率,并且每个短小的语句对服务器的影响也非常之小(一个更小的事物在事物引擎中可以得到更多的好处)。还有个好方法就是在DELETE语句之间添加一个停留的时间。这样做是为了通过时间降低负载并且减少锁所占用的时间。
2、可以参考DELETE语句的速度和优化技巧
以前看过的这篇文章也不错对MySQL DELETE语法的详细解析

想挽留 2017-10-01 1 楼

这问题没有实际场景下没法谈删除效率

  1. 如果A表要删除的数据占少数,直接delete 应该没问题,好像也没有其他办法了
  2. 如果A表要删除的数据占大多数,而且表很大(千万),最好的做法是先把A要保留的数据查出来,放到一临时表,然后重名表,最节省时间。
    create table a_new select * from a where xxx;
    rename table a to a_old,a_new to a;

另:如果只是一二百万的数据,怎么折腾都还好。