以文本方式查看主題 - 昂捷論壇 (http://m.yzsenyi.com/bbs/index.asp) -- □-技術(shù)研討會 (http://m.yzsenyi.com/bbs/list.asp?boardid=36) ---- 推薦提高 not in 的效率的方法 (http://m.yzsenyi.com/bbs/dispbbs.asp?boardid=36&id=2404) |
-- 作者:飛絮 -- 發(fā)布時(shí)間:2006/11/24 15:29:50 -- 推薦提高 not in 的效率的方法 在sqlserver2005中,部分原來在sqlserver 2000使用not in書寫的語句有可能執(zhí)行的非常慢,對整個(gè)系統(tǒng)的影響比較大,以下提供兩種方法來替代,可獲得較高的性能提升。 用not in 書寫的語句非常易讀,如 select count(*) from tbs_m_gds where c_gcode not in (select c_gcode from tbs_w_gds) 推薦用not exists代替,速度一般較快,但思路稍微要轉(zhuǎn)一下彎 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) 也可以用左連接來實(shí)現(xiàn),但較難以理解,有時(shí)速度也較慢 select count(*) 應(yīng)該注意,只要NOT IN連接與索引設(shè)置的合適(這個(gè)我還沒找到規(guī)律),其效率很高甚至高于NOT EXISTS和LEFT JOIN,所以要對已發(fā)現(xiàn)的性能問題具體分析后再修改,也不必要全部修改掉,但今后新做的應(yīng)盡量使用NOT EXISTS。 |