NOT IN和NOT EXISTS的区别

yourkeychen 2007-05-03 08:27:41
有一个SQL语句,原来用的NOT IN操作,但是执行时间太长,花费了约7分钟
因为整个业务中使用了两次类似的操作,两次操作就约花费时间14分钟,加上其他操作共17分钟左右
需要做一些改进,我换成NOT EXISTS 后速度明显变快了,约3分钟左右
但最后对结果进行确认,数据略有差别,原来用NOT IN查询能出来的结果,用NOT EXISTS查询就没有出来
也就是说NOT EXISTS比NOT IN少了一些数据, 请问

NOT IN 和 NOT EXISTS 具体的区别在哪里? 什么原因导致NOT IN能出的数据在NOT EXISTS就不出?
SELECT XXXXX
from \
(select * from $1 \
where \
kessan_kbn=3 and (BR_CD,KOKYAKU_NO) in \
(select A.BR_CD,A.KOKYAKU_NO from $1 A,$1 B \
where A.kessan_kbn =2 and B.kessan_kbn =3 and A.BR_CD = B.BR_CD and A.KOKYAKU_NO = B.KOKYAKU_NO )) A, \
(select * from $1 \
where kessan_kbn=2 and (BR_CD,KOKYAKU_NO) in \
(select A.BR_CD,A.KOKYAKU_NO from $1 A,$1 B \
where A.kessan_kbn =2 and B.kessan_kbn =3 and A.BR_CD = B.BR_CD and A.KOKYAKU_NO = B.KOKYAKU_NO )) B \
where A.BR_CD = B.BR_CD and A.KOKYAKU_NO = B.KOKYAKU_NO \
union all \
SELECT XXXXX
from \
(select * from $1 \
where kessan_kbn=3 and (BR_CD,KOKYAKU_NO) not in \
(select A.BR_CD,A.KOKYAKU_NO from $1 A,$1 B \
where A.kessan_kbn =2 and B.kessan_kbn =3 and A.BR_CD = B.BR_CD and A.KOKYAKU_NO = B.KOKYAKU_NO )) A

说明:1.用了UNION ALL,但我看了,费时间最多的不是UNION,而是下面的 NOT IN
2.同样,上面的 IN 花费时间也不算多
3.XXXXX是查询的字段名,很多
4.$1是传入的参数,表名

请问有什么好的办法改进吗?
...全文
5648 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
myfriend2010 2009-02-18
  • 打赏
  • 举报
回复
如果数据有差别,那是因为有null值造成的。。。这也就是not in 和not exists的很大不同
elfmatian 2009-02-18
  • 打赏
  • 举报
回复
not exists 和 not in 区别还是很大的
exists 外小内大(表) in 外大内小(表)
fanday 2008-12-21
  • 打赏
  • 举报
回复
哥们是做对日外包的吧,
怎么还敢把程序里用到的SQL句给晾到网上啊,
哈哈,这要是被公司发现了可不得了啊。
meiZiNick 2008-05-01
  • 打赏
  • 举报
回复
有问题请先GOOGLE,BAIDU
knowledge_Is_Life 2008-04-30
  • 打赏
  • 举报
回复
有点难度哦
yangxiao_jiang 2007-10-29
  • 打赏
  • 举报
回复
NOT EXISTS 是判断返回的是否是ture,和not in不是一样的,在一些情况下是可以相互转化的。

NOT EXISTS的性能比not in高,因为不需要进行子查询了。
bambooman 2007-10-28
  • 打赏
  • 举报
回复
not in 要扫描全表的
我觉得您要优化,应该先从业务入手。您的业务不知是要干什么,但总觉的可以变化一下,不用这么复杂。
exiori 2007-05-26
  • 打赏
  • 举报
回复
用左连接是空的方法试试

5,889

社区成员

发帖
与我相关
我的任务
社区描述
IBM DB2 是美国IBM公司开发的一套关系型数据库管理系统,它主要的运行环境为UNIX(包括IBM自家的AIX)、Linux、IBM i(旧称OS/400)、z/OS,以及Windows服务器版本
社区管理员
  • DB2
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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