MYSQL 删除大量关联数据,如何提高执行效率? 现在我有两个表,其中一个表(A)的数据大概有一千多万,而另一个表(B)的数据大概有三千万,现在需要在B表中删除与A表相关联的数据 ,SQL应该怎么写执行速度最快?普通的delete語句执行了三个小时只删除一小部分数据 我写的SQL如下:delete B from B,A where B.accountid=A.accountid; 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 delete B from Bwhere exists (select 1 from A where B.accountid=A.accountid); delete B from B,A where B.accountid=A.accountid;这个写法已经无可挑剔了。 关键是看一下你的索引都建了没有。A,B表上针对列accountid的索引。 借用楼主的贴子发个问题。我想在执行插入语句,然后执行select last_insert_id()这两步之前将select last_insert_id()置空,请问各位大侠如何实现? 这个大量删除就是这么慢 可以尝试分批删除delete B from B,A where B.accountid=A.accountid limit n;这里的n表示你每次删除的记录数 赶紧去试试这个,我把limit写中间了,报错。我是想过这个方法....写个存储过程循环执行吧。明天试试给各位结果哦 4楼的方法执行报错....从 MySQL 4.0 开始,在 DELETE 语句中可以指定多个表,用以从一个表中删除依赖于多表中的特殊情况的记录行。然而,在一个多表删除中,不能使用 ORDER BY 或 LIMIT。 在accountid上建立索引没有,直接生成新表试试create table newtt asselect b.* from b left join a on a.accountid=v.accountid where b.accountid is null 呵呵,帅哥,exists 是非常慢的哦。 都是MyISAM 引擎。。还没解决办法,急啊 表(A)的数据大概有一千多万,而另一个表(B)的数据大概有三千万这么大, limit 100,0000 这样删除 否则这操作哦会锁表 建索引create TEMPORARY table xxselect b.* from b left join a where A.accountid is null;truncate table b;insert into bselect * from xx 上面 join 后面多了个a,手误 呵呵,各位大侠久等了啊,我自己已经做出来了是用的存储过程写的 发现每次直接LIMIT 三千万条数据的时间最短。大概40分钟。15楼的我要试下,操作临时表的效率和操作数据表的的效率不在一个级别上,可以试试的 我想问mysql中的locate()返回的是什么? 求一本讲解数据库的工具书 mysql C api是否有 在结果中,用字段名key查到value的api? 怎样从一组不连续的数字中选出跳过了那些数字? navicat下设置mysql中varchar最大值 关于权限系统的数据库表设计 vc调用MySql存储过程,则存储过程中不能有select语句吗? mysql sql语句整数做过除法之后的排序出了问题? 有关MYSQL的中文字符问题 mysql 如何在图形下创建用户、管理用户、数据库等 搬数据库乱码问题2 根据备份文件和日志文件恢复数据库
where exists (select 1 from A where B.accountid=A.accountid);
这个写法已经无可挑剔了。 关键是看一下你的索引都建了没有。A,B表上针对列accountid的索引。
我想在执行插入语句,然后执行select last_insert_id()这两步之前将select last_insert_id()置空,请问各位大侠如何实现?
这里的n表示你每次删除的记录数
赶紧去试试这个,我把limit写中间了,报错。我是想过这个方法....
写个存储过程循环执行吧。明天试试给各位结果哦
create table newtt as
select b.* from b left join a on a.accountid=v.accountid where b.accountid is null
呵呵,帅哥,exists 是非常慢的哦。
都是MyISAM 引擎。。
还没解决办法,急啊
这么大, limit 100,0000 这样删除 否则这操作哦会锁表
select b.* from b left join a where A.accountid is null;
truncate table b;
insert into b
select * from xx