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

时间:2021-12-27 23:25:30
表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)


执行完以上语句后,过了半个小时还没有出来结果,请各位大侠支招,感谢!!!

6 个解决方案

#1


试试这个:
select CUS_ID,ACC_NBR from A
where not exists (select 1 from b where a.ACC_NBR = b.ACC_NBR )

#2


另外,可以考虑给ACC_NBR字段创建索引,这样可以提高查询的速度

#3


引用 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有很大区别吗?开销好像差好远。
建索引我记得有利也有弊,因为我不是程序,只是一个数据库,为了方便分析用。

#4


引用 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有很大区别吗?开销好像差好远。
建索引我记得有利也有弊,因为我不是程序,只是一个数据库,为了方便分析用。


哦,这个not in 和not exists ,产生的执行计划应该是不一样,not exists的效率更高。

#5


1楼的select 1也是一个提高效率的做法,你的语句中用distinct会增加查询开销,降低查询效率

#6


引用 5 楼 dotnetstudio 的回复:
1楼的select 1也是一个提高效率的做法,你的语句中用distinct会增加查询开销,降低查询效率
了解,谢谢!!

#1


试试这个:
select CUS_ID,ACC_NBR from A
where not exists (select 1 from b where a.ACC_NBR = b.ACC_NBR )

#2


另外,可以考虑给ACC_NBR字段创建索引,这样可以提高查询的速度

#3


引用 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有很大区别吗?开销好像差好远。
建索引我记得有利也有弊,因为我不是程序,只是一个数据库,为了方便分析用。

#4


引用 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有很大区别吗?开销好像差好远。
建索引我记得有利也有弊,因为我不是程序,只是一个数据库,为了方便分析用。


哦,这个not in 和not exists ,产生的执行计划应该是不一样,not exists的效率更高。

#5


1楼的select 1也是一个提高效率的做法,你的语句中用distinct会增加查询开销,降低查询效率

#6


引用 5 楼 dotnetstudio 的回复:
1楼的select 1也是一个提高效率的做法,你的语句中用distinct会增加查询开销,降低查询效率
了解,谢谢!!