有A和B两个表,A表有10W+数据,B表有100W+数据

有A和B两个表,A表有10W+数据,B表有100W+数据,要查询出在A表中但是不在B表中的数据。
A,B表的结构如下:
create table A(
`id` INT (255) not null,
primary key (`id`)
);

create table B(
`id` INT (255) not null,
primary key (`id`)
);
求教解决方法。注意数据量比较大
我一开始的回答是:使用not in进行集合运算,但是这样的话,select id from b要加载100W行数据到内存
select id from a
where id not in 
(select id from b)
全部评论
可以使用not exists
点赞 回复 分享
发布于 2015-11-29 17:57
同问,遇到了类似问题
点赞 回复 分享
发布于 2015-11-30 10:25
使用A表和B表各五万条数据做了几次测试,使用not in和not exist的性能差别不大,甚至not in 还好些。 not exists的语句如下:  select * from a where not exists(  select * from b  where b.id = a.id ) 运行时间对比: not in: 0.161s    0.160s    0.160s     0.161s     0.161s    0.187s    0.169s    0.175s    0.161s    0.171s not ex:0.176s     0.176s     0.178s    0.201s    0.259s    0.184s    0.176s    0.190s    0.177s    0.176s 所以,个人感觉使用not exists不是解决方法
点赞 回复 分享
发布于 2015-12-03 15:47

相关推荐

02-08 20:56
已编辑
南京工业大学 Java
在等offer的比尔很洒脱:我也是在实习,项目先不说,感觉有点点小熟悉,但是我有点疑问,这第一个实习,公司真的让实习生去部署搭建和引入mq之类的吗,是不是有点过于信任了,我实习过的两个公司都是人家正式早搭好了,根本摸不到部署搭建的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
牛客网
牛客企业服务