Rss & SiteMap

昂捷论坛 http://www.enjoyit.com.cn

中国零售业界精英论坛!
共1 条记录, 每页显示 15 条, 页签: [1]
[浏览完整版]

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

1楼
飞絮 发表于: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。

共1 条记录, 每页显示 15 条, 页签: [1]

Copyright © 2006-2010 EnjoyIT.com.cn
网友言论或观点与昂捷公司无关!涉及版权/著作权问题请与发帖者直接联系
Powered By Dvbbs Version 8.2.0
Processed in 0.14453 s, 2 queries.