| 发表于:2007-05-03 20: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是传入的参数,表名 请问有什么好的办法改进吗? |
|
|
|
|