求SQL, 查询100万条记录中,不包含另外一个表10W记录的语句

HuoLarry 2014-02-14 12:25:07
表A有70个字段(100W行):
CUS_ID,ACC_NBR...
-------------------
2001,1351234567
2002,1381234567
2003,1361234567
2004,1371234567


表B:有一个字段(10W行)
ACC_NBR
-------
1351234567
1361234567
1371234567

------------------需要得到的结果
CUS_ID,ACC_NBR ...
-------------------
2002,1381234567 ...

我自己写好的SQL是这样:

select CUS_ID,ACC_NBR from A
where ACC_NBR not in (select distinct ACC_NBR from b)


执行完以上语句后,过了半个小时还没有出来结果,请各位大侠支招,感谢!!!
...全文
329 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
HuoLarry 2014-02-15
  • 打赏
  • 举报
回复
引用 5 楼 dotnetstudio 的回复:
1楼的select 1也是一个提高效率的做法,你的语句中用distinct会增加查询开销,降低查询效率
了解,谢谢!!
HuoLarry 2014-02-14
  • 打赏
  • 举报
回复
引用 1 楼 yupeigu 的回复:
试试这个:
select CUS_ID,ACC_NBR from A
where not exists (select 1 from b where a.ACC_NBR = b.ACC_NBR )
兄台这样果然有效率,22秒就搞定了,not in 和not exists有很大区别吗?开销好像差好远。 建索引我记得有利也有弊,因为我不是程序,只是一个数据库,为了方便分析用。
LongRui888 2014-02-14
  • 打赏
  • 举报
回复
另外,可以考虑给ACC_NBR字段创建索引,这样可以提高查询的速度
LongRui888 2014-02-14
  • 打赏
  • 举报
回复
试试这个:
select CUS_ID,ACC_NBR from A
where not exists (select 1 from b where a.ACC_NBR = b.ACC_NBR )
KeepSayingNo 2014-02-14
  • 打赏
  • 举报
回复
1楼的select 1也是一个提高效率的做法,你的语句中用distinct会增加查询开销,降低查询效率
LongRui888 2014-02-14
  • 打赏
  • 举报
回复
引用 3 楼 19850713 的回复:
[quote=引用 1 楼 yupeigu 的回复:] 试试这个:
select CUS_ID,ACC_NBR from A
where not exists (select 1 from b where a.ACC_NBR = b.ACC_NBR )
兄台这样果然有效率,22秒就搞定了,not in 和not exists有很大区别吗?开销好像差好远。 建索引我记得有利也有弊,因为我不是程序,只是一个数据库,为了方便分析用。[/quote] 哦,这个not in 和not exists ,产生的执行计划应该是不一样,not exists的效率更高。

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧