sql语句优化之用EXISTS替代IN、用NOT EXISTS替代NOT IN的语句
2010-11-25 17:26
656 查看
摘自:http://www.codesky.net/article/doc/201003/201003170943.htm
在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接。在这种情况下, 使用EXISTS(或NOT EXISTS)通常将提高查询的效率。在子查询中,NOT IN子句将执行一个内部的排序和合并。无论在哪种情况下,NOT IN都是最低效的 (因为它对子查询中的表执行了一个全表遍历)。为了避免使用NOT IN ,我们可以把它改写成外连接(Outer Joins)或NOT EXISTS。
如
我要查询 Sendorder表中的冗余数据(没有和reg_person或worksite相连的数据)
sql="select Sendorder.id,Sendorder.reads,Sendorder.addtime from Sendorder where Sendorder.person_id not in(select user_id from reg_person ) or Sendorder.worksite_id not in(select id from worksite) order by Sendorder.addtime desc"
程序执行时间:40109.38毫秒
sql="select Sendorder.id,Sendorder.reads,Sendorder.addtime from Sendorder where not EXISTS (SELECT id FROM reg_person where reg_person.user_id=Sendorder.person_id) or not EXISTS (SELECT id FROM worksite where worksite.id=Sendorder.worksite_id) order by Sendorder.addtime desc"
程序执行时间:8531.25毫秒
很明显使用not EXISTS效率高多了
在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接。在这种情况下, 使用EXISTS(或NOT EXISTS)通常将提高查询的效率。在子查询中,NOT IN子句将执行一个内部的排序和合并。无论在哪种情况下,NOT IN都是最低效的 (因为它对子查询中的表执行了一个全表遍历)。为了避免使用NOT IN ,我们可以把它改写成外连接(Outer Joins)或NOT EXISTS。
如
我要查询 Sendorder表中的冗余数据(没有和reg_person或worksite相连的数据)
sql="select Sendorder.id,Sendorder.reads,Sendorder.addtime from Sendorder where Sendorder.person_id not in(select user_id from reg_person ) or Sendorder.worksite_id not in(select id from worksite) order by Sendorder.addtime desc"
程序执行时间:40109.38毫秒
sql="select Sendorder.id,Sendorder.reads,Sendorder.addtime from Sendorder where not EXISTS (SELECT id FROM reg_person where reg_person.user_id=Sendorder.person_id) or not EXISTS (SELECT id FROM worksite where worksite.id=Sendorder.worksite_id) order by Sendorder.addtime desc"
程序执行时间:8531.25毫秒
很明显使用not EXISTS效率高多了
相关文章推荐
- Sql语句优化之用exists、not exists替代in、not in
- sql语句优化之用EXISTS替代IN、用NOT EXISTS替代NOT IN的语句
- sql语句优化之用EXISTS替代IN、用NOT EXISTS替代NOT IN的语句
- sql语句优化--用EXISTS替代IN、用NOT EXISTS替代NOT IN
- SQL语句优化—in,not in,exists,not exists, left join...on
- NOT EXISTS替代NOT IN EXISTS替换DISTINCT 识别‘低效执行’的SQL语句
- NOT EXISTS替代NOT IN EXISTS替换DISTINCT 识别‘低效执行’的SQL语句
- sql 语句 IN , NOT IN , EXISTS ,NOT EXISTS 理解
- SQLServer 优化SQL语句 in 和not in的替代方案
- 优化SQL语句:in 和not in的替代方案
- NOT EXISTS替代NOT IN 和 EXISTS替换DISTINCT 识别‘低效执行’的SQL语句
- SQLServer 优化SQL语句 in 和not in的替代方案
- SQLServer 优化SQL语句:in 和not in的替代方案
- sql语句中的 in 、not in 、exists、not exists 详细用法说明和差别----not in失效
- SQLServer 优化SQL语句 in 和not in的替代方案
- SQLServer 优化SQL语句:in 和not in的替代方案
- sql语句中的 in 、not in 、exists、not exists 详细用法说明和差别----not in失效
- 优化SQL 语句 in 和not in 的替代方案
- 优化SQL语句:in 和not in的替代方案
- SQLServer 优化SQL语句:in 和not in的替代方案