你执行一下Select PingZheng From RuKu,看看有没有数据 如果有数据,则朝里面添加一条测试数据,令该数据的PingZheng等与一个ChuKu表中DanHao字段里没有的值,在执行一下查询,看看是什么结果
看看PingZheng跟DanHao是不是对应的在查询分析器里执行看
难道这个语句会快? SELECT 1 FROM RuKu WHERE PingZheng=C.DanHao
SELECT * FROM ChuKu C WHERE NOT EXISTS (SELECT 1 FROM RuKu WHERE PingZheng=C.DanHao)not in 的执行效率不高 还有你可以用ShowMessage(SQL.text); 来查看你的SQL语句,并把你得到的SQL语句拷贝到查询分析器里执行一下
In和EXISTS效率问题,不存在那个高那个低,看具体的情况了!!简单举例,下面两种写法产生的结果相同: 1.select A from t where A Not In('a') 2.select A from t M where Not EXISTS(select 1 from @t where M.a='a');但看看执行计划: 第1句实际等价于select A from t where A<>'a',扫描一次即完成,成本100% 第2句却要进入子查询;外查询每一行,都要进行一次内查询,才输出匹配行,成本各占50%
你执行一下Select PingZheng From RuKu,看看有没有数据
肯定是数据的问题。没数据 效率方面的问题。。差别不大。个人认为NOT EXIST 和 NOT IN 真的差别不大
SELECT * FROM ChuKu C WHERE NOT EXISTS (SELECT 1 FROM RuKu WHERE PingZheng=C.DanHao)
如果有数据,则朝里面添加一条测试数据,令该数据的PingZheng等与一个ChuKu表中DanHao字段里没有的值,在执行一下查询,看看是什么结果
SELECT 1 FROM RuKu WHERE PingZheng=C.DanHao
还有你可以用ShowMessage(SQL.text);
来查看你的SQL语句,并把你得到的SQL语句拷贝到查询分析器里执行一下
1.select A from t where A Not In('a')
2.select A from t M where Not EXISTS(select 1 from @t where M.a='a');但看看执行计划:
第1句实际等价于select A from t where A<>'a',扫描一次即完成,成本100%
第2句却要进入子查询;外查询每一行,都要进行一次内查询,才输出匹配行,成本各占50%
效率方面的问题。。差别不大。个人认为NOT EXIST 和 NOT IN 真的差别不大