昂捷论坛≡零售最前线≡□-技术研讨会 → 推荐提高 not in 的效率的方法


  共有24313人关注过本帖树形打印

主题:推荐提高 not in 的效率的方法

帅哥哟,离线,有人找我吗?
飞絮
  1楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:中校 帖子:594 积分:6649 威望:0 精华:56 注册:2005/10/21 18:45:15
推荐提高 not in 的效率的方法  发帖心情 Post By:2006/11/24 15:29:50

在sqlserver2005中,部分原来在sqlserver 2000使用not in书写的语句有可能执行的非常慢,对整个系统的影响比较大,以下提供两种方法来替代,可获得较高的性能提升。

用not in 书写的语句非常易读,如

select count(*) from tbs_m_gds where c_gcode not in (select c_gcode from tbs_w_gds)

推荐用not exists代替,速度一般较快,但思路稍微要转一下弯

select count(*) from tbs_m_gds where not exists(select * from tbs_w_gds where tbs_w_gds.c_gcode=tbs_m_gds.c_gcode)

也可以用左连接来实现,但较难以理解,有时速度也较慢

select count(*)
from tbs_m_gds left join tbs_w_gds on tbs_w_gds.c_gcode=tbs_m_gds.c_gcode
where tbs_w_gds.c_gcode is null

应该注意,只要NOT IN连接与索引设置的合适(这个我还没找到规律),其效率很高甚至高于NOT EXISTS和LEFT JOIN,所以要对已发现的性能问题具体分析后再修改,也不必要全部修改掉,但今后新做的应尽量使用NOT EXISTS。


使用IE9无法添加附件的解决方法 支持(0中立(0反对(0回到顶部