以文本方式查看主题 - 昂捷论坛 (http://enjoyit.com.cn/bbs/index.asp) -- □-技术研讨会 (http://enjoyit.com.cn/bbs/list.asp?boardid=36) ---- 推荐提高 not in 的效率的方法 (http://enjoyit.com.cn/bbs/dispbbs.asp?boardid=36&id=2404) |
-- 作者:飞絮 -- 发布时间:2006/11/24 15:29:50 -- 推荐提高 not in 的效率的方法 在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(*) 应该注意,只要NOT IN连接与索引设置的合适(这个我还没找到规律),其效率很高甚至高于NOT EXISTS和LEFT JOIN,所以要对已发现的性能问题具体分析后再修改,也不必要全部修改掉,但今后新做的应尽量使用NOT EXISTS。 |